PDA

View Full Version : [C#] Login su pagina web con antispam


Rix86
24-05-2008, 23:39
Ciao a tutti, devo fare un programma in C# che fa il login su un sito per poi elaborare dei dati...

con questo codice riesco ad effettuare il login su un sito che chiede solo user e password:

string strNewValue;
string strResponse;

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(txtURL.Text);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";

req.CookieContainer = new CookieContainer();
strNewValue = "username=" + textBox1.Text + "&password=" + textBox2.Text + "";
req.ContentLength = strNewValue.Length;

StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(strNewValue);
stOut.Close();

StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
txtResults.Text = strResponse;
webBrowser1.DocumentText = strResponse;
stIn.Close();


però devo fare il login su un sito che chiede anche il codice di verifica,
il codice riesco a caricarlo su un componente WebBrowser, ma quando provo a fare il login mi dice che il codice è sbagliato, credo perché carico l'immagine da uno stream diverso, non so come risolvere.. aiutatemi perfavore!:muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro: :muro:

RaouL_BennetH
25-05-2008, 21:24
Ma per caso parli di un sito che ha come controllo il captcha?

Rix86
25-05-2008, 21:27
Ma per caso parli di un sito che ha come controllo il captcha?

esatto :cry:

RaouL_BennetH
25-05-2008, 22:10
esatto :cry:

Beh, allora non credo che tu possa fare qualcosa di automatico per aggirarlo, almeno, non credo si possa chiedere pubblicamente come fare ;)

nuovoUtente86
25-05-2008, 22:17
Ma probabilmente nel suo programma chiede all' utente di digitare effettivamente il codice. Io avevo un problema analogo ma era dovuto al fatto che il sito aveva settato un time-out è il programma(su dispositivi mobili) utilizzava una connessione gprs.

Rix86
25-05-2008, 22:20
Beh, allora non credo che tu possa fare qualcosa di automatico per aggirarlo, almeno, non credo si possa chiedere pubblicamente come fare ;)

non voglio aggirarlo! voglio visualizzare il codice e inserirlo manualmente su una textbox per fare il login, ho provato a visualizzarlo separatamente con webBrowser1.Navigate(URLdel capcha);
ma quando faccio il login dice che il codice è errato, sicuramente perché il codice lo devo ricavare dallo stesso stream ma non so come fare

Rix86
25-05-2008, 23:52
Ma probabilmente nel suo programma chiede all' utente di digitare effettivamente il codice. Io avevo un problema analogo ma era dovuto al fatto che il sito aveva settato un time-out è il programma(su dispositivi mobili) utilizzava una connessione gprs.

che faceva il tuo programma? non hai nessun suggerimento per me? :(

Traxsung
26-05-2008, 04:28
Rix86... io purtroppo non sono in grado di aiutarti, ma ti ringrazio per il codice... mi serviva proprio

tomminno
26-05-2008, 09:25
non voglio aggirarlo! voglio visualizzare il codice e inserirlo manualmente su una textbox per fare il login, ho provato a visualizzarlo separatamente con webBrowser1.Navigate(URLdel capcha);
ma quando faccio il login dice che il codice è errato, sicuramente perché il codice lo devo ricavare dallo stesso stream ma non so come fare

Sei sicuro che non venga mandato altro al server durante la normale navigazione?
Potrebbe esserci anche qualche altro campo magari hidden o inserito tramite javascript che rende invalido il login.
Prova a vedere con Firefox e Live HTTP Headers.

Una volta ho dovuto fare il login automatico su una pagina aspx e senza il plugin di FF non sarei mai arrivato a trovare tutti i dati da rimandare indietro al server.

Rix86
26-05-2008, 15:52
Sei sicuro che non venga mandato altro al server durante la normale navigazione?
Potrebbe esserci anche qualche altro campo magari hidden o inserito tramite javascript che rende invalido il login.
Prova a vedere con Firefox e Live HTTP Headers.

Una volta ho dovuto fare il login automatico su una pagina aspx e senza il plugin di FF non sarei mai arrivato a trovare tutti i dati da rimandare indietro al server.

si c'é altro questo non è il codice specifico per quel sito, ho già controllato con ieHTTPHeaders

per il sito che mi fa impazziere la differenza rispetto al codice che ho postato è solo questa:

strNewValue = "COOKIEusername=" + textBox1.Text + "&COOKIEpass=" + textBox2.Text + "&verify=" + textBox3.Text + "&loginsubmit=Login";

Rix86
26-05-2008, 15:54
Rix86... io purtroppo non sono in grado di aiutarti, ma ti ringrazio per il codice... mi serviva proprio

prego :D

tomminno
26-05-2008, 17:20
si c'é altro questo non è il codice specifico per quel sito, ho già controllato con ieHTTPHeaders

per il sito che mi fa impazziere la differenza rispetto al codice che ho postato è solo questa:

strNewValue = "COOKIEusername=" + textBox1.Text + "&COOKIEpass=" + textBox2.Text + "&verify=" + textBox3.Text + "&loginsubmit=Login";

Non mi è chiaro come esegui il login, perchè vedo che fai la richiesta tramite WebRequest e poi visualizzi con WebBrowser, chi è che manda i dati per il login?
Hai provato a fare tutto o tramite WebBrowser o tramite WebRequest?
Non vorrei che il server tenesse traccia anche del browser che ha fatto la richiesta.

Rix86
26-05-2008, 17:26
Non mi è chiaro come esegui il login, perchè vedo che fai la richiesta tramite WebRequest e poi visualizzi con WebBrowser, chi è che manda i dati per il login?
Hai provato a fare tutto o tramite WebBrowser o tramite WebRequest?
Non vorrei che il server tenesse traccia anche del browser che ha fatto la richiesta.

mando così:

strNewValue = "COOKIEusername=" + textBox1.Text + "&COOKIEpass=" + textBox2.Text + "&verify=" + textBox3.Text + "&loginsubmit=Login";

StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(strNewValue);
stOut.Close();

il webbrowser l'ho aggiunto solo per vedere la pagina che carica per capire se logga o no, ho provato a fare tutto da webbrowser ma non so come fare