Estoy tratando de averiguar cómo manejar de forma robusta los errores de autenticación proxy (HTTP 407 código de estado) cuando se utiliza la clase System.Net.WebClient.System.Net.WebClient Autenticación de proxy 407 error
En el campo, vemos muchos usuarios que reciben una autenticación de proxy 407 WebException, pero no estoy seguro de cuál es una buena estrategia predeterminada. En .Net 2.0/3.5, se supone que la configuración de autenticación del proxy debe heredarse de la configuración del sistema de Internet Explorer. Firefox, Opera y Chrome usan estos mismos ajustes.
Aquí está el código básico que estamos utilizando:
using System.Net;
string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);
Cuando falla este código, abrimos el navegador del usuario y los envía a una página de ayuda . De nuestros registros web, sabemos que estos clientes pueden conectarse correctamente en sus navegadores. ¿Quizás estén ingresando manualmente su nombre de usuario proxy y contraseña antes de que lleguen a nuestra página de ayuda? No lo sabemos
Parece que podríamos usar WebClient.UseDefaultCredentials, pero este parece redundante si WebClient está utilizando la configuración del sistema de todos modos.
Cualquier ayuda es apreciada.
Gracias Eric. Fiddler funciona bien. Para aclarar, para Negotiate/NTML, las credenciales predeterminadas serán proporcionadas por WebClient independientemente de si configuro UseDefaultCredentials = true? En otras palabras, ¿hay algún valor en el manejo de 407 WebException y reintentar con UseDefaultCredentials = true? ¿Por qué no solo siempre configura UseDefaultCredentials = true? ¿Riesgo de seguridad? Exención de responsabilidad: WinInet parecía manejar esto mucho mejor. Dado que todos en el universo quieren atravesar los proxies, ¿por qué no hacer esto automáticamente o iniciar un evento y proporcionar una interfaz de usuario estándar para ingresar/guardar credenciales? – Daniel
Experimenté más con Fiddler. Pensé que sería fácil simplemente proporcionar el nombre de usuario y la contraseña ("1", "1") como a continuación, pero no funciona. string url = "http://www.java.com/"; webClient = new WebClient(); CredentialCache cache = new CredentialCache(); caché.Add (nuevo Uri (url), "Básico", nuevo NetworkCredential ("1", "1")); webClient.Proxy.Credentials = credentialCache; webClient.Credentials = credentialCache; string contents = webClient.DownloadString (url); – Daniel
Lo tengo trabajando. Por algún motivo, CredentialCache no funcionó. Tuve que pasar un NetworkCredential a webClient.Proxy.Credentials. – Daniel