Установите учетные данные прокси в элементе управления веб-браузером

Я работаю над устаревшим кодом, в котором приложение использует AxSHDocVw.AxWebBrowser (не System.Windows.Forms.Control) для открытия веб-страниц, и я расширяю его, чтобы учитывать прокси.

У меня есть следующий пример на http://www.pinvoke.net/default.aspx/wininet/internetsetoption.html использовать InternetSetOption() для прохождения через указанный прокси-сервер и проверить его работу.

Теперь проблема в том, что я пробовал все, но не смог передать имя пользователя и пароль с помощью следующего кода:

//-- Set Proxy Username
bool resultF = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_USERNAME, username, username.Length+1);
var errorF = Marshal.GetLastWin32Error();

//-- Set Proxy Password
bool resultG = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_PASSWORD, password, password.Length+1);
var errorG = Marshal.GetLastWin32Error();

Оба resultF и resultG возвращают true и не имеют ошибок, но все еще работают. Любая подсказка о том, что здесь может происходить? и какой метод у меня есть для отладки этого?

Заранее спасибо.


person Trav L    schedule 26.03.2010    source источник
comment
возможный дубликат « title = «как установить прокси для управления веб-браузером, не влияя на систему, т. Е. Прокси»> stackoverflow.com/questions/2499568/   -  person Sheng Jiang 蒋晟    schedule 26.03.2010
comment
Похоже, это должно было сработать, но если это не так, вам, вероятно, нужно реализовать обратный вызов IHTTPNegotiate и добавить туда свой код.   -  person EricLaw    schedule 05.03.2011


Ответы (1)


На самом деле я нашел работоспособное решение, где оно находилось под навигацией с прокси-аутентификацией в заголовке:

var credentialStringValue = "user:pass";
var credentialByteArray = ASCIIEncoding.ASCII.GetBytes(credentialStringValue);
var credentialBase64String = Convert.ToBase64String(credentialByteArray);

Object nullObject = 0;
Object nullObjectString = "";
Object authObject = string.Format("Proxy-Authorization: Basic {0}{1}", credentialBase64String, Environment.NewLine);

browser.Navigate(args.Url, ref nullObject, ref nullObject, ref nullObjectString, ref authObject);

где browser это:

public AxWebBrowser browser;
person Trav L    schedule 30.03.2010
comment
Из любопытства, кэширует ли это информацию о прокси для всех будущих запросов через объект веб-браузера? т.е. если пользователь затем щелкает ссылку на странице, отображаемой в элементе управления браузера, происходит ли этот канал связи также через прокси-сервер? - person Marcus Pope; 16.12.2010
comment
Нет, это не сработает, если соединение не будет использовано повторно. - person EricLaw; 05.03.2011