Pregunta

Estoy tratando de averiguar cómo manejar de manera robusta los errores de autenticación de proxy (HTTP Código de estado 407) cuando se utiliza la clase System.Net.WebClient.

En el campo, vemos a muchos usuarios que reciben una autenticación de proxy 407 WebException, pero no estoy seguro de cuál es una buena estrategia predeterminada. En la red 2.0 / 3.5, la configuración de autenticación proxy se supone que se debe heredar 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 usando:

using System.Net;

string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);

Cuando este código falla, abrimos el navegador del usuario y lo enviamos a una ayuda página. De nuestros registros web, sabemos que estos clientes pueden conectarse con éxito 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 esto parece redundante si WebClient está utilizando la configuración del sistema de todos modos.

Cualquier ayuda es apreciada.

¿Fue útil?

Solución

Internet Explorer no almacena en caché / reutilización de forma persistente las credenciales de autenticación del proxy si la autenticación del proxy utiliza BASIC o DIGEST Para negociar / NTLM, se proporcionarán las credenciales predeterminadas.

Por lo tanto, a pesar de que .NET se hereda de la configuración de IE, no obtendrá ningún " gratuito " compatibilidad con la autenticación proxy para Basic / Digest a menos que esté ejecutando en IE; deberás avisar al usuario o proporcionar una pantalla de configuración.

Fiddler (www.fiddler2.com) tiene la " Autenticación de proxy de solicitud " Opción en el menú Reglas que puede utilizar para simular este escenario para realizar pruebas.

Otros consejos

Resolvimos ese problema agregando un cuadro de diálogo de configuración que permite al usuario elegir " usar proxy " ;. Si se realiza esta configuración, utilizamos estos parámetros (dirección, credenciales ...). Si no, asumimos que se puede hacer una conexión sin ninguna interacción manual. En el caso de un error hacemos: a.) intente nuevamente usando las credenciales por defecto b.) emergente una información que una configuración en configuración podría ayudar ...

Si la autenticación proxy se realiza a través de " credenciales predeterminadas " (Usuario de Windows) IE también reacciona a un error de autenticación y envía credenciales predeterminadas en este caso. Si esto no funciona, abre un cuadro de diálogo de credenciales. No estoy seguro de si todos los navegadores manejan esto de esta manera, pero simplemente puedes intentarlo utilizando fiddler, para que puedas ver lo que está pasando.

Sé que se trata de una publicación anterior, pero tuve un problema similar al intentar descargar un archivo XML utilizando WebClient en una tarea de script SSIS 2008R2 (SQL Server Integration Services) (código VB.NET) a través de un servidor proxy a un sitio remoto Asegurado a través de SSL que también requiere autenticación.

Tomó un tiempo encontrar una solución y esta publicación ayudó en el lado del proxy. A continuación se muestra el código de script que trabajó para mí. Podría ser útil para alguien que busca algo similar.

    Dim objWebClient As WebClient = New WebClient()
    Dim objCache As New CredentialCache()

    'https://www.company.net/xxxx/resources/flt
    Dim strDownloadURL As String = Dts.Variables("FileURL").Value.ToString

    'apiaccount@company.net
    Dim strLogin As String = Dts.Variables("FileLogin").Value.ToString

    'sitepassword
    Dim strPass As String = Dts.Variables("FilePass").Value.ToString

    'itwsproxy.mycompany.com
    Dim strProxyURL As String = Dts.Variables("WebProxyURL").Value.ToString

    '8080
    Dim intProxyPort As Integer = Dts.Variables("WebProxyPort").Value

    'Set Proxy & Credentials as a Network Domain User acc to get through the Proxy
    Dim wp As WebProxy = New WebProxy(strProxyURL, intProxyPort)
    wp.Credentials = New NetworkCredential("userlogin", "password", "domain")
    objWebClient.Proxy = wp

    'Set the Credentials for the Remote Server not the Network Proxy
    objCache.Add(New Uri(strDownloadURL), "Basic", New NetworkCredential(strLogin, strPass))
    objWebClient.Credentials = objCache

    'Download file, use Flat File Connectionstring to save the file
    objWebClient.DownloadFile(strDownloadURL, Dts.Connections("XMLFile").ConnectionString)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top