2010-03-26 77 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