8

我将此代码与 .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 版本之间一定有区别。非常感谢您提前。

4

3 回答 3

11

只需将其添加到配置中

 <system.net>
      <defaultProxy useDefaultCredentials="true" >
      </defaultProxy>
   </system.net>
于 2015-05-26T05:59:14.420 回答
1

我以前在使用 Visual Studio 解决方案时遇到过这个问题。这帮助了我:

打开 IE。转到工具 -> Internet 选项。单击连接选项卡,然后单击 LAN 设置按钮。取消选中“自动检测设置”。

于 2016-04-07T21:53:09.550 回答
0

有时重新启动 Visual Studio 可以解决此问题。

于 2019-10-16T12:58:17.240 回答