ChatGPT解决这个技术问题 Extra ChatGPT

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

调用 Web 服务时出现此错误:

“远程服务器返回错误:(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>

S
Seçkin Durgay

只需将其添加到配置中

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

对于那些感兴趣的人,这正是我在 NetSuite 控制台/Web 服务应用程序中需要的(似乎是)防火墙/代理约束。
最佳答案,使其成为配置细节而不是代码问题。
这在 Asp.net core 2.0 中仍然有效。我不得不添加一个 web.config 文件来处理这个问题。
Mine 是一个使用 AWS SDK 访问 S3 存储桶的 C# 控制台应用程序。在我的控制台应用程序中将此添加到我的 app.config 解决了这个问题
R
Romil Kumar Jain

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

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

这对我来说很完美。如果您发现自己不想硬编码您的用户名和密码,请先尝试此选项。
谢谢那行得通。但是,与 mehmet emin 所示的方法相比,这样做是否存在安全风险?添加网络凭据?还是使用网络凭据会提供更多权限,并引入安全风险?
@Bryan“Mehmet Emin”代码的唯一问题是凭据的硬编码。在现实世界中,由于安全威胁,每个月都会更改密码,所以要么在配置文件中配置它们。所以跟随我的东西总是好的,或者我也喜欢 Seckin 的方式。
按预期工作。谢谢
@kucluk您已经创建了服务代理对象,因此请在调用任何服务方法之前放置此代码。
M
Michael Myers

请咨询您的防火墙专家。他们为 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");

瞧!


谢谢@Werner-du-Toit。这正是我所需要的。
uirTradeStream ?
M
Michael Myers

可能 prod 中的 machine 或 web.config 有配置中的设置;您可能不需要代理标签。

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

谢谢,我试过了,但我仍然收到“(407)需要代理身份验证”错误。添加您列出的部分是否会为您停止错误?在我的本地机器上唯一可以确定的是在代码中设置 myProxy.Credentials 属性。
J
Josh Darnell
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;

webRequest.Proxy = WebRequest.DefaultWebProxy;

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

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

这是成功的。


uirTradeStream ?
嗨使用此代码,但它不适用于 webRequest.Proxy = WebRequest.DefaultWebProxy;并获得异常:(407)需要代理身份验证。请帮忙
K
KoturB

我有一个类似的代理相关问题。就我而言,添加以下内容就足够了:

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

n
nirav

考虑写这个答案,因为上面没有任何效果,您不想指定代理位置。

如果您使用的是 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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅