在Web浏览器控件中设置代理凭据

时间:2010-03-26 00:07:34

标签: c# .net proxy webbrowser-control credentials

我正在处理遗留代码,其中应用程序使用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();

resultFresultG都返回true并且没有错误,但仍然有效。对这里可能发生的事情的任何暗示?我有什么方法来调试这个?

提前致谢。

1 个答案:

答案 0 :(得分: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;