Удаленный сервер возвратил ошибку: (407) Требуется проверка подлинности прокси
Я получаю эту ошибку при вызове веб-службы:
"Удаленный сервер возвратил ошибку: (407) Требуется проверка подлинности прокси".
Я получил общее представление, и я могу заставить код работать, добавив
myProxy.Credentials = NetworkCredential("user", "password", "domain");
или используя DefaultCredentials в коде. Моя проблема в том, что звонок на веб-сервис работает в производстве без этого.
Кажется, что существует не кодовое решение с участием 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>
6 ответов
Просто добавьте это в конфиг
<system.net>
<defaultProxy useDefaultCredentials="true" >
</defaultProxy>
</system.net>
В следующем коде нам не нужно жестко кодировать учетные данные.
service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
Проверьте с вашим экспертом брандмауэра. Они открывают брандмауэр для серверов 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");
и вуаля!
Возможно, машина или web.config в prod имеют настройки в конфигурации; вам, вероятно, не понадобится прокси-тег.
<system.net>
<defaultProxy useDefaultCredentials="true" >
<proxy usesystemdefault="False"
proxyaddress="http://<ProxyLocation>:<port>"
bypassonlocal="True"
autoDetect="False" />
</defaultProxy>
</system.net>
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password");
Это успешно.
Подумал о написании этого ответа, так как сверху ничего не сработало, и вы не хотите указывать местоположение прокси.
Если вы используете 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
У меня была похожая проблема, связанная с прокси. В моем случае было достаточно добавить:
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");