2010-03-26 78 views
0

我正在使用應用程序使用AxSHDocVw.AxWebBrowser而不是System.Windows.Forms.Control)的遺留代碼來打開網頁並將其擴展以將代理考慮在內。在Web瀏覽器控件中設置代理憑證

我有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(); 

兩個resultFresultG回報true並沒有錯誤,但它仍在工作。任何暗示可能發生在這裏的事情?和我有什麼方法來調試呢?

在此先感謝。

+0

可能重複的http://計算器.com/questions/2499568/how-to-set-a-proxy-for-webbrowser-control-without-effecting-the-system-ie-proxy/2504683#2504683 – 2010-03-26 11:36:10

+0

這看起來應該是有效的,但如果它是不,你可能需要實現一個IHTTPNegotiate回調,並在那裏添加你的代碼。 – EricLaw 2011-03-05 14:49:58

回答

1

我實際上發現work'able解決方案,其中這是謊言下導航與代理驗證在報頭:

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對象緩存所有未來請求的代理信息?即如果用戶點擊瀏覽器控件中呈現的頁面中的鏈接,該通信通道是否也通過代理髮生? – 2010-12-16 19:14:35

+0

不,那不行,除非連接發生重用。 – EricLaw 2011-03-05 14:47:39