2009-07-20 13 views
17

Czy można wykryć/ponownie użyć tych ustawień?Sposób automatycznego wykrywania/używania ustawień proxy IE w .net HttpWebRequest

Jak?

Wyjątkiem Dostaję jest Jest to wyjątek podczas łączenia się 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" 
+0

Jeśli otrzymujesz wyjątek, opublikuj całość: ex.ToString(). –

+0

wyjątek jest powyżej – Kumar

+0

Jest to bardziej prawdopodobne, że problem zapory. Po prostu nie nawiązujesz połączenia. –

Odpowiedz

23

HttpWebRequest będzie faktycznie używać ustawień proxy IE domyślnie.

Jeśli nie chcesz, aby , chcesz z nich skorzystać, musisz zastąpić właściwość .Proxy wartością zerową (bez proxy) lub wybranymi ustawieniami 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(); 
+0

nie wygląda na to, Używam kontrolki recaptcha, która używa HTTPWebRequest i zgłasza wyjątek – Kumar

+0

zachowuje się tak, jak mówię. Możesz to pokazać, korzystając z powyższego fragmentu kodu i używając Fiddlera. Zobacz tę odpowiedź z pokrewnego tematu, aby zobaczyć, jak zdemaskować, że jest to domyślne zachowanie: http://stackoverflow.com/questions/1112320/removing-obsolete-webproxy-getdefaultproxy-references/1112399#1112399 –

+2

Jedno zastrzeżenie to że domyślne ustawienia proxy są odczytywane z rejestru podczas uruchamiania aplikacji. Jeśli chcesz je ponownie załadować, ponieważ zostały zmienione, musisz to wyraźnie zaznaczyć, ustawiając znak.Właściwość proxy. – EricLaw

1

Dzieje się domyślnie, jeśli WebRequest.Proxy nie jest jawnie ustawione (domyślnie ustawiony na WebRequest.DefaultWebProxy).

+0

nie wygląda na to, ponieważ rzuca wyjątek może być zastrzeżenie być może – Kumar

+3

nie - ustawienie WebRequest.Proxy na wartość null omija wszystkie serwery proxy. Pozostawienie go "tak, jak jest" pozwala wybrać domyślny serwer proxy (domyślnie nie jest on pusty). –

+0

@Kumar: dodaj pełny wyjątek. @Rob: Masz rację. Domyślnie jest ustawiony na "WebRequest.DefaultWebProxy". –

2

Dla osób mających problemy z coraz to grać ładny z serwera ISA, może próbować skonfigurować serwer proxy w następujący sposób:

IWebProxy webProxy = WebRequest.DefaultWebProxy; 
webProxy.Credentials = CredentialCache.DefaultNetworkCredentials; 
myRequest.Proxy = webProxy; 
7

I był już bardzo podobną sytuację gdzie HttpWebRequest nie wykrył domyślnie poprawnych szczegółów serwera proxy i ustawienie UseDefaultCredentials również nie działało. Wymuszenie ustawień w kodzie zadziałało jednak:

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; 
} 

, a ponieważ korzysta z domyślnych poświadczeń, nie powinien pytać użytkownika o jego szczegóły.

Należy pamiętać, że jest to duplikat mojej odpowiedzi zamieszczonych tutaj bardzo podobny problem: Proxy Basic Authentication in C#: HTTP 407 error