Salve
sto programmando un applicazione java che esegue il login ad un sito e successivamente esegue delle ricerche sempre sullo stesso sito.
ora vi posto un pò di codice e vi spiego il mio problema
codice:
manager = new CookieManager(null, CookiePolicy.ACCEPT_ALL); CookieHandler.setDefault(manager);
urlConnection = new URL(Names.urlHome);
con = (HttpURLConnection) urlConnection.openConnection();
String headerName = null;
for (int i = 1; (headerName = con.getHeaderFieldKey(i)) != null; i++) {
if (headerName.equals("Set-Cookie")) {
jSessionId = con.getHeaderField(i);
}
}
System.out.println(jSessionId);
//Login
urlConnection = new URL(Names.urlLogin);
con = (HttpURLConnection) urlConnection.openConnection();
con.setRequestProperty("User-Agent", Names.userAgent);
con.setRequestProperty("Cookie", jSessionId);
con.setRequestProperty("Content-Type", Names.contentType);
con.setRequestProperty("Accept-Language", Names.language);
con.setRequestProperty("Accept-Encoding", Names.acceptEncoding);
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);
wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParametersLogin);
wr.flush();
wr.close();
System.out.println("Sending 'POST' request to URL : " + Names.urlLogin);
System.out.println("Post parameters : " + urlParametersLogin);
System.out.println("Response Code : " + con.getResponseCode() + " " + con.getResponseMessage());
log.info("Login completato");
questo è il costruttore della mia classe, l'ho pensato in questo modo per far si di fare una sola volta il login e poi utilizzare la stessa sessione per tutte le ricerche che mi interessano!
in un primo momento invio una richiesta fantoccio solo per farmi restituire la sessione e poi invio i parametri alla servlet di login.
questo invece è il metodo che fa le ricerche sul sito
codice:
log.info("============ Ricerco il prodotto: " + riferimento + " ============"); urlConnection = new URL(Names.urlRicerca);
con = (HttpURLConnection) urlConnection.openConnection();
con.setRequestProperty("Cookie", jSessionId);
con.setDoOutput(true);
wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParametersSearch + riferimento);
wr.flush();
wr.close();
System.out.println("Sending 'POST' request to URL : " + Names.urlRicerca);
System.out.println("Post parameters : " + urlParametersSearch + riferimento);
System.out.println("Response Code : " + con.getResponseCode() + " " + con.getResponseMessage());
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
log.info("Ricerca completata: " + riferimento);
il mio problema è che effettua la ricerca correttamente ma se non si è loggati non fa visualizzare alcune proprietà degli oggetti ricercati sul sito. e infatti quando ricerco le informazioni nella response non le trovo come se il login non fosse andato a buon fine.
dove sbaglio?
grazie mille