2012-09-13 9 views
5

Il seguente codice non esegue il login a yahoo. Come dovrebbe essere riscritto?qual è il modo corretto di scrivere un'applicazione .NET che si collega automaticamente a www.yahoo.com?

(naturalmente, "username" e "password" sarebbero stati sostituiti con il mio attuale nome conto & password.)

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

Ho provato la codifica. Non ha funzionato. Non ci sono comunque caratteri non ANSI. –

risposta

5

Quando avere uno sguardo alla sorgente html della pagina di Yahoo, noterete ci sono molti campi nascosti

image showing the hidden fields of the form

che vengono utilizzati per proteggere l'utente, ad esempio contro CSRF

Potrebbe essere, devi prima inviare una richiesta a yahoo per ottenere un token anti CSRF valido per poi includerlo nella tua richiesta. Dovrai anche dare un'occhiata alla javascript che il sito utilizza. Forse c'è qualcosa calcolato sul sito del cliente, e quindi inviare con i dati di accesso.

Attenzione, poiché questi siti cambiano spesso e forse domani l'implementazione non funzionerà.

1

Ci sono diversi elementi di input nascosti nel modulo. È abbastanza probabile che ci siano controlli per la loro esistenza sul lato server, possibilmente insieme ai cookie per verificare che la richiesta provenga da quella pagina di accesso. Hai provato ad aggiungerli alla richiesta tramite HttpWebRequest?

2

Avrai difficoltà ad accedere in questo modo e penso che non sia realmente possibile. Se è davvero necessario accedere a livello di programmazione, è necessario OpenID o OAuth.

Per saperne di più Yahoo authentication here

+1

Se non fosse possibile, i browser non potrebbero farlo ... –

0

ho avuto un compito simile poco fa - ho dovuto effettuare il login a un sito web ed estrarre alcuni dati fuori di esso. Non c'erano servizi web per aiutarmi. Stavo usando VB6 e quello che ho finito è creare un oggetto del browser, caricare la pagina web e loggarmi in quel modo, quindi raschiare a schermo i dati di cui avevo bisogno.

Questo approccio è grezzo e inaffidabile e non funzionerà se le procedure di accesso includono la protezione captcha, ma è veloce e può aiutarti mentre cerchi di capire un approccio più elegante e permanente.

0

Ho una pagina html che accede alla posta yahoo con un po 'di codice dalla loro pagina di accesso. Ha funzionato per un po ', quindi suggerisco di guardare l'html sulla loro pagina di login vicino al pulsante "[Login]" e capire quali valori devono essere inclusi con la richiesta http.

Guardando la pagina html che ho scritto per accedere a yahoo mail, devi solo passare i valori HIDDEN corretti al server, oltre ovviamente al tuo utente e passare. Pertanto ti consiglio di esaminare i tag di valore HIDDEN all'interno del modulo html e sperimentare per vedere quali devono essere inviati con la richiesta web http. Fondamentalmente ricreando la loro forma pagina di login in .Net Framework stile

Spero che questo aiuta :)

Problemi correlati