2012-09-13 18 views
5

El siguiente código no inicia sesión en yahoo. ¿Cómo debería ser reescrito?¿Cuál es la forma correcta de escribir una aplicación .NET que inicie sesión automáticamente en www.yahoo.com?

(por supuesto, "nombre de usuario" y "contraseña" serían reemplazados con mi nombre de cuenta real & contraseña.)

static void Main(string[] args) 
    { 
     string input = string.Format("username={0}&passwd={1}", "<username>", "<password>"); 

     WebRequest request = HttpWebRequest.Create("https://login.yahoo.com/config/login"); 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 

     StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
     writer.Write(input); 
     writer.Close(); 

     StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream()); 

     string x = reader.ReadToEnd(); 

     Console.Read(); 
    } 
+0

He intentado la codificación. No funcionó. No hay caracteres que no sean ANSI de todos modos. –

Respuesta

5

Al echar un vistazo a la fuente HTML de la página de Yahoo, se dará cuenta de que hay muchos campos ocultos

image showing the hidden fields of the form

que se utilizan para proteger al usuario, por ejemplo, contra CSRF

Puede ser, primero deberá enviar una solicitud a yahoo para obtener un token anti CSRF válido para luego incluirlo en su solicitud. También deberá echarle un vistazo al javascript que usa el sitio. Tal vez hay algo calculado en el sitio del cliente, y luego enviarlo con los datos de inicio de sesión.

Tenga en cuenta que esos sitios a menudo cambian y tal vez mañana su implementación no funcione.

1

Hay varios elementos de entrada ocultos en el formulario. Es muy posible que existan comprobaciones de su existencia en el lado del servidor, posiblemente junto con las cookies para verificar que la solicitud proviene de esa página de inicio de sesión. ¿Has intentado agregarlos a la solicitud a través de HttpWebRequest?

2

Va a tener dificultades para iniciar sesión como esta y creo que no es realmente posible. Si realmente necesita iniciar sesión mediante programación, necesitará OpenID u OAuth.

Leer más sobre Yahoo authentication here

+1

Si no fuera posible, los navegadores no podrían hacerlo ... –

0

tuve una tarea similar hace un tiempo - que tenía que iniciar sesión en un sitio web y sacar algunos datos de él. No había servicios web para ayudarme. Estaba usando VB6 y lo que terminé haciendo fue crear un objeto webbrowser, cargar la página web e iniciar sesión de esa manera, y luego copiar los datos que necesitaba.

Este enfoque es tosco y poco confiable, y no funcionará si los procedimientos de inicio de sesión incluyen protección de captcha, pero es rápido y puede ayudarlo mientras intenta descubrir un enfoque más elegante y permanente.

0

Tengo una página html que inicia sesión en el correo yahoo con algún código de su página de inicio de sesión. Ha funcionado por un tiempo, por lo que sugiero ver el html en su página de inicio de sesión cerca del botón "[Inicio de sesión]" y averiguar qué valores deben incluirse con la solicitud http.

En cuanto a la página HTML que escribí para el acceso al correo de yahoo, sólo es necesario para pasar los valores ocultos adecuadas para el servidor, además de, obviamente, su usuario y contraseña. Por lo tanto, le recomiendo que examine las etiquetas de valores HIDDEN en el formulario html y experimente para ver cuáles deben enviarse con la solicitud web http. Básicamente recrear su forma página de registro en estilo .Net Framework

Espero que esto ayude :)

Cuestiones relacionadas