远程服务器返回错误:(407)需要代理身份验证

时间:2010-04-05 22:40:38

标签: c# .net proxy-authentication http-status-code-407 machine-config

我在拨打网络服务时遇到此错误:

“远程服务器返回错误:(407)需要代理验证”。

我得到了一般的想法,我可以通过添加

来获得代码
myProxy.Credentials = NetworkCredential("user", "password", "domain");

或在代码中使用DefaultCredentials。我的问题是,没有这个,对Web服务的调用就可以在生产中使用。

似乎有一个涉及Machine.config的非代码解决方案,但它是什么?目前我无法访问生产盒的machine.config文件,看看它是什么样的。我尝试更新我的machine.config如下,但我仍然得到407错误。

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
        <bypasslist>
            <clear />
        </bypasslist>
        <proxy proxyaddress="myproxy:9000"
               usesystemdefault="false"
               bypassonlocal="true"
               autoDetect="False" />
    </defaultProxy>
</system.net>

7 个答案:

答案 0 :(得分:127)

只需将此添加到配置

即可
<system.net>
    <defaultProxy useDefaultCredentials="true" >
    </defaultProxy>
</system.net>

答案 1 :(得分:50)

在以下代码中,我们不需要对凭据进行硬编码。

service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

答案 2 :(得分:19)

请咨询您的防火墙专家。 他们为PROD服务器打开防火墙,因此无需使用代理服务器。

谢谢你的提示帮助我解决了我的问题:

必须在两个位置设置凭据才能超过407错误:

HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password", "domain");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");

瞧!

答案 3 :(得分:6)

prod中的机器或web.config可能具有配置中的设置;你可能不需要代理标签。

<system.net>
    <defaultProxy useDefaultCredentials="true" >
        <proxy usesystemdefault="False"
               proxyaddress="http://<ProxyLocation>:<port>"
               bypassonlocal="True"
               autoDetect="False" />
    </defaultProxy>
</system.net>

答案 4 :(得分:3)

HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;

webRequest.Proxy = WebRequest.DefaultWebProxy;

webRequest.Credentials = new NetworkCredential("user", "password");

webRequest.Proxy.Credentials = new NetworkCredential("user", "password");

成功。

答案 5 :(得分:2)

我遇到了类似的代理相关问题。在我的情况下,它足以添加:

webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");

答案 6 :(得分:0)

想写这个答案是因为上面没有任何作用,并且您不想指定代理位置。

如果您使用的是httpClient,请考虑一下。

HttpClientHandler handler = new HttpClientHandler();

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
handler.Proxy = proxy;

var client = new HttpClient(handler);
// your next steps...

如果您使用的是HttpWebRequest

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri + _endpoint);

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = proxy;

推荐人:https://medium.com/@siriphonnot/the-remote-server-returned-an-error-407-proxy-authentication-required-86ae489e401b