2010-03-26 3 views
0

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

У меня есть следующий пример: 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 и не имеет ошибок, но он по-прежнему работает. Любой намек на то, что может здесь происходить? и какой метод я должен отлаживать?

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

+0

можно дублировать HTTP: // StackOverflow .com/questions/2499568/how-to-set-a-proxy-for-webbrowser-control-without-effect-the-system-ie-proxy/2504683 # 2504683 –

+0

Похоже, что это сработало, но если это нет, вам, вероятно, потребуется реализовать обратный вызов IHTTPNegotiate и добавить туда свой код. – EricLaw

ответ

1

Я на самом деле нашел work'able решение, в котором она была ложь под навигацию с Proxy-Authentication в заголовке:

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; 
+0

Из любопытства ли кэширование информации прокси для всех будущих запросов через объект webbrowser? т.е. если пользователь затем нажимает ссылку на странице, отображаемой в элементе управления браузером, делает ли этот канал связи поверх прокси-сервера? –

+0

Нет, это не сработает, если соединение не будет повторно использовано. – EricLaw