.net - System.Net.WebClient 与代理身份验证 407 错误

标签 .net proxy webclient

我试图弄清楚如何稳健地处理代理身份验证错误(HTTP
407 状态代码)在使用 System.Net.WebClient 类时。

在现场,我们看到很多用户收到了 407 代理认证
WebException,但我不确定什么是好的默认策略。在.Net
2.0/3.5,代理认证设置应该继承自
Internet Explorer 系统设置。 Firefox、Opera 和 Chrome 使用这些
相同的设置。

这是我们使用的基本代码:

using System.Net;

string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);

当此代码失败时,我们打开用户的浏览器并将其发送给帮助
页。从我们的网络日志中,我们知道这些客户可以成功连接
他们的浏览器。也许他们正在手动输入他们的代理用户名和
在他们进入我们的帮助页面之前输入密码?我们不知道。

似乎我们可以使用 WebClient.UseDefaultCredentials,但是这个
如果 WebClient 无论如何都在使用系统设置,则似乎是多余的。

任何帮助表示赞赏。

最佳答案

如果代理身份验证使用 BASIC 或 DIGEST,Internet Explorer 不会持久缓存/重用代理身份验证凭据。对于协商/NTLM,将提供默认凭据。

因此,即使 .NET 继承自 IE 设置,您也不会获得对 Basic/Digest 代理身份验证的任何“免费”支持,除非您碰巧在 IE 中运行;您需要提示用户或提供配置屏幕。

Fiddler (www.fiddler2.com) 在“规则”菜单上有“请求代理身份验证”选项,您可以使用它来模拟此场景进行测试。

关于.net - System.Net.WebClient 与代理身份验证 407 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202708/

相关文章:

.net - 使用域凭据连接的 SSH.NET

.net - 编辑器模板不适用于 DisplayFormat

c# - 使用两个具有相同命名空间的 .NET 库

java - 使用 Spring WebFlux 的 webclient 在 Mono 上有条件地重复或重试

c# - 将 ASCII 编码为 HTML

c# - AndAlso 之间有几个 Expression<Func<T, bool>> : referenced from scope

Android模拟器网络配置

android - 如何在 Chrome 或 Stock 浏览器中以编程方式将每个 Web 请求重定向到本地服务器?

java - 如何从 Java 使用 WinInet API?

javascript - 从网站保存嵌入式 pdf