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

发布于 2024-08-26 19:24:09 字数 934 浏览 9 评论 0原文

我正在处理旧代码,其中应用程序使用 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 并且没有错误,但是它仍然有效。关于这里可能发生什么的任何暗示吗?我必须用什么方法来调试这个?

提前致谢。

I am working on a legacy code where an application uses AxSHDocVw.AxWebBrowser (not System.Windows.Forms.Control) to open up web pages and am extending it to take proxy into considerations.

I have following example on http://www.pinvoke.net/default.aspx/wininet/internetsetoption.html to use InternetSetOption() to go through specified proxy and tested that it works.

Now the hurdle is I tried everything but failed to pass username and password with following code:

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

Both resultF and resultG return true and has no errors but it still working. Any hint on what may be happening here? and what method do I have to debug this?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盗心人 2024-09-02 19:24:09

我实际上找到了一个可行的解决方案,它位于 header: 中的 Proxy-Authentication 导航下,

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;

I actually found a work'able solution, where it was lie under navigation with Proxy-Authentication in header:

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

where browser is:

public AxWebBrowser browser;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文