Как автоматически определять / использовать настройки прокси IE в .net HttpWebRequest - PullRequest
17 голосов
/ 20 июля 2009

Можно ли обнаружить / повторно использовать эти настройки?

Как?

Исключение, которое я получаю, Это исключение при подключении к http://www.google.com

System.Net.WebException: Unable to connect to the remote server --->
  System.Net.Sockets.SocketException: A connection attempt failed because the
  connected party did not properly respond after a period of time, or established
  connection failed because connected host has failed to respond 66.102.1.99:80

  at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, 
     SocketAddress socketAddress)
  at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
  at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,
     Socket s4, Socket s6, Socket& socket, IPAddress& address,
     ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout,
     Exception& exception)
  --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.GetResponse()
  at mvcTest.MvcApplication.Application_Start() in
     C:\\home\\test\\Application1\\Application1\\Program.cs:line 33"

Ответы [ 4 ]

25 голосов
/ 20 июля 2009

HttpWebRequest фактически использует настройки прокси IE по умолчанию.

Если вы не хотите их использовать, вы должны специально переопределить свойство .Proxy либо на ноль (без прокси), либо на настройки прокси по вашему выбору.

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://news.bbc.co.uk");
 //request.Proxy = null; // uncomment this to bypass the default (IE) proxy settings
 HttpWebResponse response = (HttpWebResponse)request.GetResponse();

 Console.WriteLine("Done - press return");
 Console.ReadLine();
7 голосов
/ 02 августа 2013

У меня была очень похожая ситуация, когда HttpWebRequest не собирал правильные данные прокси-сервера по умолчанию и установка UseDefaultCredentials также не работала. Однако принудительное выполнение настроек в коде сработало:

IWebProxy proxy = myWebRequest.Proxy;
if (proxy != null) {
    string proxyuri = proxy.GetProxy(myWebRequest.RequestUri).ToString;
    myWebRequest.UseDefaultCredentials = true;
    myWebRequest.Proxy = new WebProxy(proxyuri, false);
    myWebRequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
}

и поскольку он использует учетные данные по умолчанию, он не должен запрашивать у пользователя их данные.

Обратите внимание, что это дубликат моего ответа, опубликованного здесь для очень похожей проблемы: Базовая аутентификация на прокси в C #: ошибка HTTP 407

2 голосов
/ 28 июня 2013

Для людей, которые испытывают проблемы с тем, чтобы заставить это хорошо играть с ISA-сервером, вы можете попытаться настроить прокси следующим образом:

IWebProxy webProxy = WebRequest.DefaultWebProxy;
webProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
myRequest.Proxy = webProxy;
1 голос
/ 20 июля 2009

Это происходит по умолчанию, если WebRequest.Proxy не установлен явно (по умолчанию установлено WebRequest.DefaultWebProxy).

...