Cómo autodetectar/usar la configuración del proxy IE en .NET httpwebRequest
-
18-09-2019 - |
Pregunta
¿Es posible detectar/reutilizar esa configuración?
Cómo ?
La excepción que recibo es que esta es la excepción al conectarme 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"
Solución
HttpWebRequest realmente usará la configuración del proxy IE de forma predeterminada.
Si usted no Quiere usarlos, debe anular específicamente el .proxy Proprty a NULL (sin proxy) o la configuración de proxy de su elección.
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();
Otros consejos
Estaba obteniendo una situación muy similar en la que la HttpWebRequest no estaba recogiendo los detalles del proxy correctos de forma predeterminada y la configuración de UsedFaultCredentials tampoco funcionó. Sin embargo, forzar la configuración en el código funcionó una delicia:
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;
}
Y debido a que esto usa las credenciales predeterminadas, no debe pedirle al usuario sus detalles.
Tenga en cuenta que este es un duplicado de mi respuesta publicada aquí para un problema muy similar: Autenticación básica proxy en C#: HTTP 407 Error
Para las personas que tienen problemas para que esto juegue bien con el servidor ISA, puede intentar configurar proxy de la siguiente manera:
IWebProxy webProxy = WebRequest.DefaultWebProxy;
webProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
myRequest.Proxy = webProxy;
Esto sucede de forma predeterminada, si WebRequest.proxy no se establece explícitamente (por defecto está configurado en WebRequest.DefaultWebProxy
).