(407)需要代理认证

本文关键字:代理 认证 | 更新日期: 2023-09-27 18:06:27

我知道这个问题已经被问过很多次了。我已经阅读了这里和其他类似网站上的大多数帖子。

http://social.msdn.microsoft.com/forums/en us/ncl/thread/2931d21c - 9 - ca8 - 4256 b213 - 915 fad4c941b/

没有用。这里是环境

Windows Server 2008 R2 64bitVisual Studio 2008.Net Framework 3.5

这是我尝试过的

我使用代码

进行代理身份验证
WebRequest req = WebRequest.Create(requestUri + data);
req.Proxy = new System.Net.WebProxy(<ProxyURL>:<port>",true);
req.Proxy.Credentials = CredentialCache.DefaultCredentials;
WebResponse resp = req.GetResponse();

这是有效的,但看到它减慢了应用程序,我知道我可以编辑机器。我做的配置文件。它也奏效了!

    <system.net>
      <defaultProxy
      useDefaultCredentials="true">
      <proxy
        proxyaddress="<proxyURL>:<port>"
        bypassonlocal="True"/>
     </defaultProxy>
   </system.net>

至少持续一两天。然后它开始失败。

然后编辑成如下

    <system.net>
     <defaultProxy
       useDefaultCredentials="true">
       <proxy usesystemdefault="True"/>
       </defaultProxy>
    </system.net>

根据我的理解,这将使用IE设置连接到代理,但仍然不起作用。我还尝试了以下代码

WebProxy proxy = new WebProxy(<proxy>:<port>);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri(requestUri + data), "BASIC", new NetworkCredential(<username>,<password>));
proxy.Credentials = myCache;
request.Proxy = proxy;
request.Method = "GET";

这不起作用。

注:我可以复制机器。配置文件到我的电脑(Win XP),并从那里运行。exe(没有代理代码),它工作得很好。

64位操作系统是否需要做一些不同的事情?我也可以在服务器上打开IE8并访问URI。目标是对代理进行预认证,而不必在代码中提供用户名密码。

(407)需要代理认证

@David Moore是对的。如果IE在手动浏览时工作正常,那么只需添加req.Proxy.Credentials = CredentialCache.DefaultCredentials;,它就会工作正常。

这是一个修改后的代码从MSDN,这是为我工作。

using System;
using System.Diagnostics;
using System.IO;
using System.Net;
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            string urlDemo = "http://en.wikipedia.org/wiki/Main_Page";
            // Create a request for the URL. 
            WebRequest request = WebRequest.Create(urlDemo);
            // If required by the server, set the proxy credentials.
            request.Proxy.Credentials = CredentialCache.DefaultCredentials;
            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Display the content.
            Console.WriteLine(responseFromServer);
            Console.ReadLine();
            // Clean up the streams and the response.
            reader.Close();
            response.Close();
        }
    }
}

希望能有所帮助;-)

HttpWebRequest使用默认的Internet设置(IE)代理,所以如果它在服务器上的Internet Explorer上工作良好,那么从您的代码中也应该是ok的(提供它在相同的用户帐户下运行)。

我会写machine。

我要检查的一件事是在IIS中,你可以为Windows身份验证小程序配置提供者。这应该将NTLM和Kerberos作为提供者列在一个列表中;我会把它们调换一下,看看这是否有什么不同(例如,如果NTLM是列表的顶部,那么将Kerberos移到顶部)。很抱歉,我不能给你确切的说明,因为我这台机器上没有IIS。

如果你还在挣扎,我建议你在服务器上运行Fiddler来捕获请求和响应流,以获得更多线索。