我将此代码与 .NET 3.5 一起使用并收到错误“远程服务器返回错误:(407) 需要代理身份验证。”
using (WebClient client = new WebClient())
{
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;
try
{
string webPageStr = client.DownloadString(URL);
Console.WriteLine("OK");
}
catch (Exception ex)
{
Console.WriteLine("FAIL");
Console.WriteLine(ex.Message);
}
}
但是,此代码可在 .NET 4.0 中顺利运行,因为此行足以通过代理身份验证,但不适用于 .NET 3.5。
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;
因此,我尝试了许多其他方法来解决这个问题,但它们都不起作用:
1) 将 CredentialCache.DefaultCredentials 行替换为
WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(user, password, domain);
2) 创建新的代理对象
IWebProxy proxy = new WebProxy(proxyUrl, port);
proxy.Credentials = new NetworkCredential(user, pass, domain);
client.Proxy = proxy;
client.Credentials = new NetworkCredential(user, pass, domain);
3)添加这一行
client.UseDefaultCredentials = true;
4) 使用 HttpWebRequest 代替 WebClient 并重复上述每个过程。这是示例代码。
HttpWebRequest webRequest = WebRequest.Create(URL) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential(user, pass, domain);
webRequest.Proxy.Credentials = new NetworkCredential(user, pass, domain);
try
{
webRequest.GetResponse();
Console.WriteLine("OK");
}
catch (Exception ex)
{
Console.WriteLine("FAIL");
Console.WriteLine(ex.Message);
}
我觉得我走到了死胡同,因为我必须使用 .NET 3.5。我不知道这两个 .NET 版本之间一定有区别。非常感谢您提前。