Прокси по умолчанию в .net core 2.0 - PullRequest
0 голосов
/ 07 мая 2018

Я видел пару вопросов о ядре 2.0 о том, как заставить HttpClient использовать прокси-сервер по умолчанию, настроенный в системе. Но не там, где нашел правильный ответ. Размещая этот вопрос, надеясь, что кто-то, возможно, столкнулся с этой проблемой, может найти решение к настоящему времени.

В версиях .net framework я использовал следующую конфигурацию в моем web.config, и она сработала для меня.

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

Но в .net core 2.0, где я делаю веб-запрос к внешнему API из внутренней сети моей компании, мой код завершается с ошибкой 407. Требуется проверка подлинности прокси.

После небольшого исследования я считаю, что ваш HttpClient не может использовать настройки прокси-сервера по умолчанию, настроенные через WPAD в IE. Может ли кто-нибудь исправить мое понимание здесь?

На этой странице https://github.com/dotnet/corefx/issues/7037

Сказано так:

"По умолчанию для свойства HttpClientHandler.UseProxy установлено значение true. И значением по умолчанию для HttpClientHandler.Proxy является NULL, что означает использование прокси по умолчанию."

Но я не наблюдаю такого поведения.

Обновление:

Я наконец-то смог вызвать внешний веб-интерфейс API, указав адрес прокси-сервера и затем сделав вызов HttpClient. Все еще задаетесь вопросом, как использовать настройки прокси по умолчанию в IE.

 using (var handler = new HttpClientHandler {
                    Credentials = new System.Net.NetworkCredential(user, password, domain),

                    UseProxy = true,
                    Proxy = new System.Net.WebProxy(new Uri("http://xxxxxxx:8080"), true)                                       
                })
{

    handler.Proxy.Credentials = new NetworkCredential("xxxx", "yyyyy", "cccccc");                    
    using (var httpClient = new HttpClient(handler))
    {
        var request = new HttpRequestMessage()
        {
            RequestUri = new Uri(destinationUrl),
            Method = HttpMethod.Post
        };

        request.Content = new StringContent(requestXml, Encoding.UTF8, "text/xml");             

        HttpResponseMessage response = await httpClient.SendAsync(request);

        Task<Stream> streamTask = response.Content.ReadAsStreamAsync();
    }
}   

Если кто-то заинтересовался выяснением того, как мне удалось выяснить, был ли прокси-сервер, я написал следующий код в .net 4.0 и обнаружил используемый прокси.

var proxy = WebRequest.GetSystemWebProxy();
var url = proxy.GetProxy(new Uri("http://google.com"));

Спасибо

1 Ответ

0 голосов
/ 08 октября 2018

Я надеюсь, что это ответ, который вы ищете: Проблемы с прокси по умолчанию # 28780

If you simply want to use the default system proxy and need to pass default credentials to that proxy (because the proxy is an authenticated proxy) during HTTP requests, then do this:

var handler = new HttpClientHandler();
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
var client = new HttpClient(handler);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...