Salve come da titolo sto cercando di effettuare da codice java alcune operazioni che solitamente si effettuano mediante un WebBrowser.
Mi scuso da subito nel caso io dica qualche castroneria perchè devo ammettere che la mia esperienza in programamzione di rete lato client è ancora molto limitata. Veniamo al dunque:come esempio sto cercando di connettermi al sito web della Vodafone ed effettuare il login tutto da codice. Per prima cosa ho scritto il codice per connettermi al sito e leggere il body e l'header della risposta ottenuta:
Ora durante una normale connessione col browser scrivendo nella barra degli indirizzicodice:private String connect() { try { //connessione URL u = new URL("http://www.190.it"); HttpURLConnection conn = (HttpURLConnection) u.openConnection(); //lettura e stampa body InputStream bodyInputStream = conn.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(bodyInputStream)); String aLine; while((aLine = in.readLine()) != null ) { System.out.println(aLine); } //lettura e stampa header int n = 1; boolean done = false; while(!done ) { String headerKey = conn.getHeaderFieldKey(n); String headerVal = conn.getHeaderField(n); if (headerKey != null || headerVal != null) { System.out.println(headerKey + "=" + headerVal); } else { done = true; } n++; } //lettura e ritorno all'esterno del cookie che mi viene richiesto di salvare //per poterlo usar ein future connessioni String cookie = conn.getHeaderField("Set-Cookie"); int index = cookie.indexOf(";"); if (index >= 0) cookie = cookie.substring(0, index); return cookie; } catch (IOException e) { e.printStackTrace(); return null; } }
http://www.190.it si subisce un redirect alla pagina http://www.190.it/190/trilogy/jsp/ho...bName=HOME+190 (che poi è quella checontiene il form di login).
Come faccio a eseguire questa cosa da codice, cioè come faccio a connettermi alla nuova url.Premetto che connettermi diretatmente all'url http://www.190.it/190/trilogy/jsp/ho...bName=HOME+190 da un errore che recita pressapoco così dopo qualche secondo d'attesa:
**************errore******************
java.net.ProtocolException: Server redirected too many times (20)
at sun.net.http://www.protocol.http.HttpURLConn...getInputStream(Unknown Source)
at Send.connect(PostSend.java:85)
********************************************
Il codice sopra fornisce come output il seguente:
**************body******************
<HTML>
<HEAD>
<LINK REL="SHORTCUT ICON" HREF="/res/img/favicon.ico">
<META HTTP-EQUIV="refresh" CONTENT="0 ;URL=/190/trilogy/jsp/home.do?BV_UseBVCookie=No&tabName=HOME+190">
</HEAD>
<BODY>
</BODY>
</HTML>
********************************************
**************header************************
Date=Fri, 24 Feb 2006 13:59:11 GMT
Server=Apache/2.0.54 (Unix) DAV/2
Set-Cookie=SITESERVER=ID=000000000000000000040D8AC3F3A 7EB; path=/; expires=Mon, 22-Feb-16 13:59:11 GMT; domain=.190.it
Set-Cookie=SITESERVER=ID=000000000000000000040D8AC3F3A 77F; path=/; expires=Mon, 22-Feb-16 13:59:11 GMT; domain=.190.it
Last-Modified=Fri, 09 Apr 2004 12:35:06 GMT
ETag="cf-a01b9280"
Accept-Ranges=bytes
Content-Length=207
Vary=Accept-Encoding,User-Agent
Keep-Alive=timeout=20, max=100
Connection=Keep-Alive
Content-Type=text/html; charset=ISO-8859-1
********************************************
In cui come si vede nel body mi viene restituita proprio l'url a cui verrei reindirizzato se fossi un browser.
Ripeto c'è la consistente possibilità che io abbia detto una marea di fesserie, pertanto cheido un aiuto sulla base di quello che devo fare (cioè fare il login da codice) più che sul codice che ho postato.Grazie