我想弄清楚如何在使用System.Net.WebClient类时稳健地处理代理验证错误(HTTP 407状态码)。System.Net.WebClient与代理验证407错误
在该字段中,我们看到许多用户接收到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使用系统设置,这个 似乎是多余的。
任何帮助表示赞赏。
谢谢埃里克。小提琴奏效。 澄清,对于Negotiate/NTML,无论是否设置UseDefaultCredentials = true,WebClient都将提供默认凭据?换句话说,在处理407 WebException并使用UseDefaultCredentials = true重试时是否有价值?为什么不总是设置UseDefaultCredentials = true?安全风险? 意见声明:WinInet似乎处理得更好。鉴于宇宙中的每个人都想要遍历代理,为什么不自动执行此操作或者触发事件并提供用于输入/保存证书的标准UI? – Daniel 2009-07-31 20:32:46
我使用Fiddler进行了更多实验。我认为只要提供像下面这样的用户名和密码(“1”,“1”)很容易,但它不起作用。 string url =“http://www.java.com/”; webClient = new WebClient(); CredentialCache cache = new CredentialCache(); cache.Add(new Uri(url),“Basic”,new NetworkCredential(“1”,“1”)); webClient.Proxy.Credentials = credentialCache; webClient.Credentials = credentialCache; string contents = webClient.DownloadString(url); – Daniel 2009-07-31 23:47:32
得到它的工作。由于某种原因,CredentialCache不起作用。我必须将NetworkCredential传递给webClient.Proxy.Credentials。 – Daniel 2009-08-01 00:02:34