2011-01-19 23 views
29

Deseo descargar algo usando un objeto WebClient en C#, pero el dominio de descarga requiere que inicie sesión. ¿Cómo puedo iniciar sesión y mantener los datos de sesión usando WebClient? Sé cómo publicar datos con WebClient.¿Cómo inicio sesión en un sitio con WebClient?

+1

¿Qué tipo de mecanismo de autenticación requiere el servidor? Básico, Formularios, Windows/NTLM? –

+2

lol he resuelto el problema añadiendo valores de forma general mediante la búsqueda de cookies de firefox :) webClient.Headers.Add ("Cookie", "PHPSESSID = xxxxxxx; mosesuser = xxxxxxx;"); – MonsterMMORPG

+0

¿Qué valores? ¿Te refieres a la verdadera cookie de autenticación? Recuerde, ese valor probablemente expirará y no podrá volver a utilizarse en otro momento. –

Respuesta

47

Si el problema que está teniendo es que puede autenticarse pero no puede mantener la cookie de autenticación aquí hay una versión de WebClient que acepta cookies.

private class CookieAwareWebClient : WebClient 
{ 
    public CookieAwareWebClient() 
     : this(new CookieContainer()) 
    { } 
    public CookieAwareWebClient(CookieContainer c) 
    { 
     this.CookieContainer = c; 
    } 
    public CookieContainer CookieContainer { get; set; } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 

     var castRequest = request as HttpWebRequest; 
     if (castRequest != null) 
     { 
      castRequest.CookieContainer = this.CookieContainer; 
     } 

     return request; 
    } 
} 

EDIT: El enlace que me diste utiliza la autenticación de formularios con HTTP POST, no tengo el tiempo para caminar aunque pero al menos le da un comienzo con Google.

+1

Encontré esto. pero, ¿qué debo hacer? ¿Tengo que autenticarme a través de httpwebrequest o qué? – MonsterMMORPG

+0

Depende del sistema de autenticación que utilice el sitio al que se está conectando. Vea algunas de las otras respuestas en consejos para autenticar –

+1

Deseo que esta publicación incluya un ejemplo sobre el proceso de autentificación real. – Shimmy

-1

Eche un vistazo al uso de la propiedad Credentials. P.ej. si se utiliza la autenticación básica, deberá establecer la propiedad en una instancia de NetworkCredential con el nombre de usuario y la contraseña apropiados.

El sample señalado muestra cómo usar las credenciales de usuario actualmente iniciadas para la solicitud.

+1

no funciona :( – MonsterMMORPG

+0

Okey, ya veo. El servidor usa la autenticación Forms. Eso requiere que publique el nombre de usuario y la contraseña en la url de acción especificada en la página de inicio html. También debe usar un contenedor de cookies para recibir la autenticación. cookie que viene con la respuesta a esa publicación. –

+0

@MonsterMMORPG 'DoesNotWorkNullReferenceException' – C4u

Cuestiones relacionadas