Удаленный сервер возвратил ошибку: (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");
Другие вопросы по тегам