gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:52:25 25 4
gpt4 key购买 nike

我在我的应用程序中使用 .net WebBrowser 进行网页浏览,因为我知道该控件基于 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.Navigate 方法添加额外的 header ,如下所示:

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);

没有帮助,仍然在获取身份验证表单。还尝试添加具有相同值的 Proxy-Authorization header ,仍然没有。

还尝试设置用户并通过 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 中添加注册表,解决了我的问题。

https://support.microsoft.com/en-us/help/834489/internet-explorer-does-not-support-user-names-and-passwords-in-web-sit

enter image description here

创建注册表,

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

添加一个DWORD值“iexplore.exe”并将数据设置为“0”

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

https://username:password@xxx.yyy.zzz/home

关于c# - 使用 WebBrowser 控件和代理发送身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com