Newsgroup: it.comp.java
Titolo: URLConnection e sessione  (postare su Wiki)

Ciao a tutti,
sto scrivendo un'applicazione che, in determinate circostanze, dovrebbe
aggiornare alcune pagine su Wiki. La versione di Wiki qui in uso
(VeryQuickWiki) a un sistema di locking sui file perciò, quando si vuole
editare un topic, è necessario fare queste due operazioni dalla stessa
sessione:
1) Aprire una pagina di edit
2) Postare una form
Ho scritto del codice che usando URLConnection riesce ad effettuare
separatamente queste due informazioni, ma non riesco a concatenarle in
maniera che la sessione sia preservata (e anzi, la prima chiamata mi locka
il topic e, mancando la seconda, resta lockato finché non va in timeout o
finché non viene manualmente sbloccato). Qualcuno sa dirmi cosa devo fare
perché il server riconosca le due chiamate http come provenienti dalla
stessa sessione? 
Grazie mille anticipatamente,
Niky
Vi includo qui di seguito il codice che sto usando:
public static void postOnWiki() throws IOException{
		try {
			URL url = new
URL("
http://nibp37:8080/vqwiki-2.5/jsp/Wiki?topic=Senti&action=action_edit
");
	        URLConnection conn = url.openConnection();
	        conn.setDoOutput(false);
	        conn.setDoInput(true);
	        // Get the response
	        BufferedReader rd = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
	        String line;
	        while ((line = rd.readLine()) != null) {
	        	System.out.println(line);
	        }
	        rd.close();
 
 
	    	System.out.println("************************");
 
 
	        // Construct data
	        String data = URLEncoder.encode("contents", "UTF-8") + "=" +
URLEncoder.encode("Prova", "UTF-8");
	        data += "&" + URLEncoder.encode("action", "UTF-8") + "=" +
URLEncoder.encode("Save", "UTF-8");
	        data += "&" + URLEncoder.encode("topic", "UTF-8") + "=" +
URLEncoder.encode("Senti", "UTF-8");
	        data += "&" + URLEncoder.encode("convertTabs", "UTF-8") + "=" +
URLEncoder.encode("true", "UTF-8");
	        data += "&" + URLEncoder.encode("template", "UTF-8") + "=" +
URLEncoder.encode("--No template--", "UTF-8");
 
 
	        // Send data
	        url = new URL("
http://nibp37:8080/vqwiki-2.5/jsp/Wiki
");
	        URLConnection conn2 = url.openConnection();
	        conn2.setDoOutput(true);
	        OutputStreamWriter wr2 = new
OutputStreamWriter(conn2.getOutputStream());
	        wr2.write(data);
	        wr2.flush();
 
	        // Get the response
	        BufferedReader rd2 = new BufferedReader(new
InputStreamReader(conn2.getInputStream()));
	        String line2;
	        while ((line2 = rd2.readLine()) != null) {
	        	System.out.println(line2);
	        }
	        wr2.close();
	        rd2.close();
	    } catch (Exception e) {
	    }
	}
***************************************
messaggio inviato tramite HostSearch.it
---------------------------------------
---> 
http://www.hostsearch.it/newsgroup
***************************************

 stessa sessione? 
probabilmente devi conservare nella urlconnection il cookie di sessione 
(di solito chiamato JSESSIONID) che riceverai dopo la prima chiamata

 stessa sessione? 
Dipende da come l'applicazione web riconosce le sessioni. 
Spesso la prima volta ricevi un cookie e devi rimandarlo ad ogni richiesta 
HTTP. In tal caso, la tua prima URLConnection dovra' leggere il valore 
dell'header Set-Cookie, la seconda dovra' aggiungere un header Cookie con 
il valore letto precedentemente.