C# 使用WebBrowser控件和代理发送身份验证

C# 使用WebBrowser控件和代理发送身份验证,c#,webbrowser-control,C#,Webbrowser Control,我在应用程序中使用.net WebBrowser进行web浏览,因为我知道控件基于IE,因此要设置代理,我正在查看如何配置IE代理设置。提出了pinvoke InternetSetOption,代码如下: private void SetIESettings(string proxy) { const int INTERNET_OPTION_PROXY = 38; const int INTERNET_OPEN_TYPE_PROXY = 3; Struct_INTERN

我在应用程序中使用.net WebBrowser进行web浏览,因为我知道控件基于IE,因此要设置代理,我正在查看如何配置IE代理设置。提出了pinvoke InternetSetOption,代码如下:

private void SetIESettings(string proxy)
{
    const int INTERNET_OPTION_PROXY = 38;
    const int INTERNET_OPEN_TYPE_PROXY = 3;

    Struct_INTERNET_PROXY_INFO struct_IPI;

    struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
    struct_IPI.proxy = Marshal.StringToHGlobalAnsi(proxy);
    struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");

    IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI));
    Marshal.StructureToPtr(struct_IPI, intptrStruct, true);
    InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI));
}
就像一个符咒,在设置代理后,控件将通过它。代理需要一些凭据,在通过之前需要提供用户名和密码。我尝试为webBrowser添加其他标题。导航方法如下:

var credentialStringValue = "user:password";
var credentialByteArray = ASCIIEncoding.ASCII.GetBytes(credentialStringValue);
var credentialBase64String = Convert.ToBase64String(credentialByteArray);
var credentials = string.Format("Authorization: Basic {0}{1}", credentialBase64String, Environment.NewLine);
然后调用导航

webBrowser.Navigate("http://google.com", "", null, credentials);
没有帮助,仍在获取身份验证表。还尝试添加具有相同值的代理授权标头,但仍然为空

还尝试按以下方式设置internet explorer上的用户和传递选项:

const int INTERNET_OPTION_USERNAME = 28;
const int INTERNET_OPTION_PASSWORD = 29;
var uesr = "user";
var pass = "password";
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_USERNAME, uesr, uesr.Length + 1);
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PASSWORD, pass, pass.Length + 1);
仍然不工作,安全窗口不断弹出。
显然我做错了什么,有什么建议吗?

你的方向是对的。我在使用IE comobject时遇到了这个问题

0x800C000E

以下MS KB详细说明了IE不支持URL地址中的用户名和密码的原因。我尝试在KB中添加注册表,解决了我的问题

创建一个注册表

HKEY\本地\计算机\软件\微软\互联网 Explorer\Main\FeatureControl\FEATURE\u HTTP\u用户名\u密码\u禁用

将DWORD值“iexplore.exe”和数据集添加到“0”

关于您的情况,我认为您可以简单地创建一个指向应用程序的值,并将数据设置为“0”,就像“iexplore.exe”一样,并使用以下URL格式