c# proxy httpwebrequest basic-authentication http-status-code-407

Autenticación básica Proxy en C#: error HTTP 407



httpwebrequest basic-authentication (5)

prueba esto

var YourURL = "http://yourUrl/"; HttpClientHandler handler = new HttpClientHandler() { Proxy = new WebProxy("http://127.0.0.1:8888"), UseProxy = true, }; Console.WriteLine(YourURL); HttpClient client = new HttpClient(handler);

Estoy trabajando con un proxy que requiere autenticación, es decir, en un navegador, si intento abrir una página, se solicitarán credenciales inmediatamente. Proporcioné las mismas credenciales en mi programa pero falla con el error HTTP 407.

Aquí está mi código:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); IWebProxy proxy = WebRequest.GetSystemWebProxy(); CredentialCache cc = new CredentialCache(); NetworkCredential nc = new NetworkCredential(); nc.UserName = "userName"; nc.Password = "password"; nc.Domain = "mydomain"; cc.Add("http://20.154.23.100", 8888, "Basic", nc); proxy.Credentials = cc; //proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; request.Proxy = proxy; request.Proxy.Credentials = cc; request.Credentials = cc; request.PreAuthenticate = true;

He intentado todo lo posible pero parece que me falta algo. ¿Es algo como, tengo que hacer dos solicitudes? Primero, sin credenciales, y una vez que reciba una respuesta del servidor acerca de la necesidad de credenciales, haga la misma solicitud con las credenciales.


Estaba obteniendo una situación muy similar en la que HttpWebRequest no recogía los datos de proxy correctos de forma predeterminada y tampoco funcionaba establecer UseDefaultCredentials. Sin embargo, forzar la configuración en el código fue un placer:

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 preguntar al usuario sus detalles.


Este método puede evitar la necesidad de codificar o configurar las credenciales de proxy, lo que puede ser deseable.

Ponlo en tu archivo de configuración de la aplicación, probablemente app.config. Visual Studio cambiará el nombre a yourappname.exe.config en la compilación, y terminará junto a su ejecutable. Si no tiene un archivo de configuración de la aplicación, simplemente agregue uno usando Agregar nuevo elemento en Visual Studio.

<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.net> <defaultProxy useDefaultCredentials="true" /> </system.net> </configuration>


Este problema me había estado molestando durante años. La única solución para mí fue pedirle a nuestro equipo de redes que hiciera excepciones en nuestro firewall para que ciertas solicitudes de URL no necesitaran ser autenticadas en el proxy, lo que no es ideal.

Recientemente, actualicé el proyecto a .NET 4 desde 3.5 y el código acaba de comenzar a funcionar con las credenciales predeterminadas para el proxy, sin hardcoding de credenciales, etc.

request.Proxy.Credentials = CredentialCache.DefaultCredentials;


aquí está la forma correcta de usar proxy junto con creds ..

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); IWebProxy proxy = request.Proxy; if (proxy != null) { Console.WriteLine("Proxy: {0}", proxy.GetProxy(request.RequestUri)); } else { Console.WriteLine("Proxy is null; no proxy will be used"); } WebProxy myProxy = new WebProxy(); Uri newUri = new Uri("http://20.154.23.100:8888"); // Associate the newUri object to ''myProxy'' object so that new myProxy settings can be set. myProxy.Address = newUri; // Create a NetworkCredential object and associate it with the // Proxy property of request object. myProxy.Credentials = new NetworkCredential("userName", "password"); request.Proxy = myProxy;

Gracias a todos por su ayuda ... :)