Newsgroup: it.comp.java
Titolo: URLConnection + cookies

Salve..
un problemino..
Qui prendo le informazioni del cookie ...(nell header)
.......
	conn = url.openConnection();
	in = new DataInputStream(conn.getInputStream());
	myFunction();
	conn.getAllowUserInteraction());
	conn.getContentEncoding());
	conn.getContentLength());
	conn.getContentType());	
	conn.getHeaderField(x));
....
	poi devo accedere ad un url che mi richiede queste info..
....
	conn = url.openConnection();
	in = new DataInputStream(conn.getInputStream());
...
	come posso con l'urlconnection ripassare la server il cookie 
	(l'header)  per garantimi il riconoscimento?
tnx

     (l'header)  per garantimi il riconoscimento?
Un cookie e' semplicemente un header addizionale in un'HTTP request.
URLConnection di per se' non permette di assegnare headers, pero' ha 
"setRequestProperty", e una request property e' interpretata - in certe 
sottoclassi - come un header RFC892; in tal caso, devi dichiarare 
"doOutput" nella URLConnection, etc. Non saprei, pero',se 
l'HttpURLConnection e' implementata cosi' - non ti resta che provare.
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun

 
ok grazie, ho provato ma non funziona...
Visto che ha capito il mio problema mi sapresti suggerire un modo 
alternativo all uso della classe URLCOnnection?
non so' ..casomai con servlet ma io simceramente proprio non saprei cosa 
fare ...o magari mi basta qualche input nella direzione giusta da 
seguire.
Ciao!

un problemino..
Vuoi fare un programmino per l'invio di SMS,
magari che bypassi i controlli che ora quasi
tutti sull'onda di Kataweb fanno?!
Beh, lo puoi fare... ma devi studiare il
protoccollo HTTP e farlo a mano utilizzando
dei semplici Socket! ;) E' un po' palloso ma 
ti garantisco che funziona.
Leggi:
HTTP/1.0 
http://www.rfc-editor.org/rfc/rfc1945.txt
HTTP/1.1 
http://www.rfc-editor.org/rfc/rfc2616.txt
Poi fai qualcosa del genere:
      [...]
      try {
        Socket sock = new Socket(server, port);
        PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
      }
      catch (Exception e) {
      }
      out.println ("POST /cgi-bin/programma HTTP/1.0");
      out.println ("Referer: " + p.getProperty("http_referer")); // nello standard c'è un errore!
      out.println ("Connection: Keep-Alive");    
      out.println ("User-Agent: " + p.getProperty("http_user-agent"));
      out.println ("Host: " + p.getProperty("http_host"));    
      out.println ("Accept: */*");
      out.println ("Accept-Encoding: gzip");
      out.println ("Accept-Language: en");
      out.println ("Accept-Charset: iso-8859-1,*,utf-8");
      out.println ("Content-type: " + p.getProperty("http_content-type")); // fondamentale!
      out.println ("Content-length: " + data.length());          
      out.println ("");
      out.println ("numero=0328XXXXXX&messaggio=" + URLEncoder.encode("Testo del tuo messaggio"));
      try {
        sock.close();
      }
      catch (Exception e) {
        return false;
      }  
      [...]
Questo dovrebbe insegnare che spesso usare la "pappa pronta" (leggi classi Java già fatte),
tipo: java.net.HttpURLConnection o java.net.URLConnection, può non essere la soluzione migliore!
In alternativa puoi sempre decompilarle e vedere a titolo di studio, didattico e per tuo uso
personale come la Sun le ha implementate... usa 
http://jode.sourceforge.net
Avrei potuto postarti il programmino bello e pronto con i sorgenti, ma poi ti tolgo tutto
il divertimento e poi quelli dei siti per l'invio degli SMS, tipo Kataweb, non me lo avrebbero
perdonato, poverini! :)
Gli SMS sono una vera e propria truffa a danno dei consumatori e chi offre il servizio online
poi viene a lamentarsi se girano dei software tipo: 
http://www.smssplitter.com/
.
Se rapportiamo il costo per bit di informazione trasmessa degli SMS al costo di una chiamata
vocale, beh, una telefonata a voce di pochi secondi dovrebbe costare un mutuo!!!
Ora ditemi: sono gli SMS che costano troppo o le chiamate vocale che costano troppo poco?
In questo caso direi: la prima che ho detto... siamo noi i truffati e nemmeno ce ne accorgiamo!!!
Bye

alternativo all uso della classe URLCOnnection?
Occhio che in genere i cookies sono rimandati al dominio di provenienza, quindi
per riottenere il cookie nelle invocazioni successive 
devi specificare Set-Cookie pinco=pallo;domain=... blahblah.. (cfr. RFC2109).
In ogni caso, un modo semplice e' parlare direttamente HTTP (rfc2616).


personale come la Sun le ha implementate... usa 
http://jode.sourceforge.net
un appunto : 
nel jdk della Sun vengono forniti anche i sorgenti (src.jar)
perche' decompilare? :)
Andrea
http://digilander.iol.it/schiele
due rette parallele non si incontrano 
mai e se si incontrano non si salutano

 >> 
Sto facendo in questo modo
alla prima connessione prendo il valore del cookie ..
conn.getHeaderField(2);
conn.getHeaderFieldKey(2);
e mi ritorna una cosa del vedere
key : Set-Cookie
value : 
WebLogicSession=OnlZz2ABu0rwFRHAIin9AJE1on0iVA75DsA1S6ENH7SJLg71tP
Vo|4062036184952515248/-1408235077/6/80/80/443/443/80/-1; path=/
tolgo il path=/ finale e faccio di nuovo una URLConnection passando 
questo cookie con
conn0 = url.openConnection();
conn0.setDoOutput(true);
conn0.setDoInput(true);
conn0.setRequestProperty(key,value); // quelli presi prima
ma non funziona lo stesso
...
devo passare altre informazioni?
il setRequestProperty lo imposto dopo che e' stata effettuata la 
connessione ..non e' che non mi ignora il setRe... ?
ciao!

connessione ..non e' che non mi ignora il setRe... ?
Se per "effettuata la connessione" intendi connect(), a logica va fatto prima: connect() in genere viene
usato per fare lavoro di preparazione e lasciare lo stream pronto per i dati utente - e questo *puo'* voler
dire inviare gli header sull'outputstream. Pero' dipende - ad esempio per mailto: urls, e' l'utente che 
deve scrivere From:, Subject:, linea vuota etc. Su JavaReport di dicembre c'e' un mio articolo che illustra
l'archiettura.
Per HTTP, non avendo scritto sun.net.www.http.HttpURLConnection non ho idea di come venga fatto. :)


[..]
bene.. ho risolto in questo modo:
preso il cookie e menorizzato nella variabile cookieVlaue..
conn = url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Cookie",cookieValue);
il concetto era giusto solo che la chiave che passare non era Set-Cookie
ma "Cookie"  :))
ciao e grazie!