Я видел пару вопросов о ядре 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"));
Спасибо