PDA

View Full Version : [JAVA] Accedere a pagina web con login HTTP POST


zetaenzo
02-05-2010, 12:18
Ciao a tutti :) ,
E' il primo messaggio che invio in questo forum spero possiate aiutarmi, il mio problema è quello di accedere tramite codice java al sito http://www.garzantilinguistica.it/it/login e recuperare dal dizionario italiano alcune definizioni. Vi posto il codice della form di accesso contenuto nella pagina.

codice:

<div id="login_box">
<form action="/it/session" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="0j1a7EPSCoz43rMyWIy9lmNztD+v+uHs7Z+B9zdivs8=" /></div>
<div class="block_element"><label for="e-mail">E-mail</label>
<input id="login" name="login" type="text" /></div>

<div class="block_element"><label for="password">Password</label>
<input id="password" name="password" type="password" /></div>

<div><label for="remember_me">Ricordati di me</label>
<input id="remember_me" name="remember_me" type="checkbox" value="1" /></div>

<div><input id="login_submit" name="commit" type="submit" value="Entra" /></div>
</form> </div>



Logicamente ho già username e password validi, quindi il mio problema è solo quello di accedere al dizionario e ricercare alcune definizioni di parole nel dizionario.
Avrei bisogno di un metodo per loggarmi alla pagina e mantenere l'autenticazione durante tutta l'esecuzione del programma.
Ho recuperato la richiesta HTTP che il browser invia al sito spero possa servirvi:

codice:

POST /it/session HTTP/1.1
Host: www.garzantilinguistica.it
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 GTB6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.garzantilinguistica.it/it/session/new
Cookie: __utma=244184339.2071497955.1272035102.1272707541.1272715240.3; __utmz=244184339.1272707541.2.2.utmcsr=it.answers.yahoo.com|utmccn=(referral)|utmcmd=referral|utmcct=/question/index; __utmc=244184339; _garzanti2009_session=BAh7CToOcmV0dXJuX3RvIhYvaXQvZGl6aW9uYXJpby9pdDoPc2Vzc2lvbl9pZCIlYjNlNjMwZjk3OGI2NWZkNzA5NWUyNDIwMTM5OWRhMDM6EF9jc3JmX3Rva2VuIjE1dHdzN2xhTHVWOEwvTlg0Ry9GTVVwWVhTTjdvWE9iQzVPN0RtcHBTdnhjPSIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--17e53142888ec55c0dfc166b5f326d8d7f3630ac; __utmb=244184339.3.10.1272715240
Content-Type: application/x-www-form-urlencoded
Content-Length: 139
authenticity_token=5tws7laLuV8L%2FNX4G%2FFMUpYXSN7oXObC5O7DmppSvxc%3D&login=xxxxxx%40gmail.com&password=xxxxxx&remember_me=1&commit=Entra
HTTP/1.1 302 Found
Date: Sat, 01 May 2010 12:03:00 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.4
X-Runtime: 27
Cache-Control: no-cache
Set-Cookie: auth_token=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT
Set-Cookie: auth_token=bbc915773b8ac9fee502d3ff495e890e678f83cd; path=/; expires=Sun, 01-Aug-2010 12:03:00 GMT
Set-Cookie: _garzanti2009_session=BAh7CzoOcmV0dXJuX3RvIhYvaXQvZGl6aW9uYXJpby9pdDoMdXNlcl9pZGkDRHUPOhBsYXN0X2FjY2Vzc1U6IEFjdGl2ZVN1cHBvcnQ6OlRpbWVXaXRoWm9uZVsISXU6CVRpbWUNKpAbgAAAUO0GOh9AbWFyc2hhbF93aXRoX3V0Y19jb2VyY2lvblQiCFVUQ0AJOg9zZXNzaW9uX2lkIiViM2U2MzBmOTc4YjY1ZmQ3MDk1ZTI0MjAxMzk5ZGEwMyIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7ADoQX2NzcmZfdG9rZW4iMTV0d3M3bGFMdVY4TC9OWDRHL0ZNVXBZWFNON29YT2JDNU83RG1wcFN2eGM9--aead6cd43273b2bc82caef2be05660b55efdeec3; path=/; HttpOnly
Location: http://www.garzantilinguistica.it/
Status: 302
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 105
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8



Spero qualcuno possa aiutarmi.
PS: questo programma non verrà usato per nessun fine illegale, mi serve per la mia tesi in elaborazione del linguaggio naturale.

nerthase
02-05-2010, 15:15
Ciao, la soluzione al tuo problema credo che sia simile a molte altre situazioni di login. In particolare devi fare attenzione ad un paio di cose:

TU -> SITO
Quando effettui il login, devi tenere traccia del contenuto della richiesta POST che il browser effettua al sito. Questa richiesta dovrai farla tale e quale nel tuo programma.

SITO -> TU
Quando il sito ti risponde alla richiesta POST del login, aggiungerà nella risposta HTML alcuni cookie. Devi tenere traccia di questi coockies per le prossime richieste.

TU -> SITO
Quando, dopo esserti loggato, effettui un'azione nel sito, osserva la richiesta HTTP che il browser manda al sito, e soprattutto quali cookie allega alla richiesta (sicuramente un cookie che identifica la sessione).

Io ho fatto un semplice programmino in Java che effettua il login presso un sito (http://www.nerthase.com/blog/java-http-post-con-socket), o perlomeno, verifica se i dati del login sono corretti (http://www.nerthase.com/blog/java-http-post-con-socket).

Te dovrai ampliare questo programma, tenendo traccia dei vari cookie che vengono scambiati tra TE e il SITO.


Spero che questa breve panoramica sia utile per aiutarti nella realizzazione del progetto. Se comunque durante lo sviluppo hai qualche problema, puoi tranquillamente chiedere consigli.

A presto

zetaenzo
03-05-2010, 11:09
Grazie mille per l'aiuto :D ,
ho risolto il problema impostando il cookie nella URLConnection che ho ricavato quando il mio browser ha richiesto la connessione al server autenticandomi con login e password. Anche se è una soluzione piuttosto "grezza" nel mio caso è perfetta perchè una volta ricavate le definizioni il codice scritto verrà cestinato..