2009-07-20 12 views
17

È possibile rilevare/riutilizzare tali impostazioni?Come rilevare/utilizzare automaticamente le impostazioni del proxy IE in .net HttpWebRequest

Come?

L'eccezione sto ottenendo è Questa è l'eccezione durante la connessione al 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

Se stai ricevendo un'eccezione, si prega di inviare il tutto: ex.ToString(). L'eccezione –

+0

è superiore a – Kumar

+0

Questo è più probabilmente un problema con il firewall. Non stai ottenendo una connessione. –

risposta

23

HttpWebRequest utilizzerà effettivamente le impostazioni del proxy IE per impostazione predefinita.

Se si non si desidera utilizzare, è necessario eseguire l'override della proprietà .Proxy su null (nessun proxy) o sulle impostazioni del proxy di propria scelta.

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

non sembra In realtà sto usando il controllo recaptcha che usa HTTPWebRequest e lancia un'eccezione – Kumar

+0

che si comporta come dico. Puoi dimostrarlo usando lo snippet di codice sopra e usando Fiddler. Vedere questa risposta da un argomento correlato per vedere come dimostrare che questo è il comportamento predefinito: http://stackoverflow.com/questions/1112320/removing-obsolete-webproxy-getdefaultproxy-references/1112399#1112399 –

+2

Un avvertimento è che le impostazioni proxy predefinite vengono lette dal registro all'avvio dell'applicazione. Se vuoi che vengano ricaricati perché sono stati modificati, devi specificarlo esplicitamente impostando il file.Proprietà proxy. – EricLaw

1

Questo accade per difetto, se WebRequest.Proxy non è impostato in modo esplicito (di default è impostato su WebRequest.DefaultWebProxy).

+0

non sembra che stia lanciando un'eccezione potrebbe esserci un avvertimento forse – Kumar

+3

no - l'impostazione di WebRequest.Proxy su null ignora tutti i proxy. Lasciandolo "così com'è" consente di raccogliere il proxy predefinito (non è null per impostazione predefinita). –

+0

@Kumar: pubblica l'eccezione completa. @Rob: hai ragione. Di default è impostato su 'WebRequest.DefaultWebProxy'. –

2

Per le persone che hanno problemi con ottenere questo di bel gioco con server ISA, si potrebbe tentare di configurare proxy nel seguente modo:

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

mi è stato sempre una situazione molto simile dove il HttpWebRequest non stava raccogliendo i dettagli del proxy corretti per impostazione predefinita e l'impostazione di UseDefaultCredentials non funzionava. Forzare le impostazioni nel codice tuttavia ha funzionato a meraviglia:

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

e perché questa utilizza le credenziali di default non dovrebbe chiedere all'utente per i loro dettagli.

Si noti che questo è un duplicato della mia risposta postato qui per un problema molto simile: Proxy Basic Authentication in C#: HTTP 407 error

Problemi correlati