Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56

    Mantenere i cookie tra più richiesta http

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    up, nessuno sà aiutarmi?

  3. #3
    Ciao, Credo che il codice da te postato sia incompleto per valutare una risposta; servirebbero più informazioni del tipo:
    - È la tua applicazione che ricerca dei "prodotti" in un sito esterno tramite le API oppure è un utente che fa la ricerca nel tuo sito?
    - A quale scopo fai questa ricerca (visualizzarle ad un utente, salvarle in un DB, etc...)?

    Cerca di spiegare in maniera più approfondita quello che intendi fare altrimenti non si sa da dove iniziare...

    ciao ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Si, la mia applicazione tramite il codice che ho postato dovrebbe effettuare il login su un sito (non è il mio sito, ma sono registrato, quindi ho username e password) e successivamente ricercare prodotti e memorizzare le informazioni di quest'ultimi in un DB sul mio server.
    Il sito purtroppo non fornisce delle API sto simulando io il login e la ricerca tramite richieste GET e POST, in pratica ho analizzato questo sito e ho visto tramite la console di Chrome quali servlet richiama per il login e la ricerca.
    La ricerca sembra funzionare infatti mi restituisce i prodotti che cerco, ma non mi restituisce tutte le informazioni che può ottenere un utente registrato, ma solo le informazioni che avrebbe un visitatore (sintomo che il login non è andato a buon fine).
    Credo che sia un problema di cookie, forse non sono riuscito a passargli correttamente il cookie di sessione? o c'è altro nel mio codice che non va?

  5. #5
    Quote Originariamente inviata da AspxTM Visualizza il messaggio
    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
    Ciao,
    nel tuo codice vedo che setti correttamente il cookie di login quindi il cookie lo passi... ma sei proprio sicuro che faccia correttamente il login? Se non ti funziona le cose sono 2:
    - il login non è stato fatto correttamente (loggati la risposta al login e vedi se corrisponde alla risposta che ricevi facendo un login manuale tramite browser).
    - una volta fatto il login le pagine vogliono altri parametri per riconoscere che il login sia stato fatto quindi non basta settare il cookie.

    Verifica queste cose facendo prove reali tramite browser con la console degli sviluppatori di chrome oppure l'estensione firebug per firefox..
    lolide
    Java Programmer

    Informati

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    tramite alcune prove che ho fatto sempre dalla console di sviluppatori di google ho notato che quando accedo alla home del sito vengono creati altri cookie, non solo la sessione, ma se li cancello manualmente, e conservo solo il jsessionid quando effettuo il login la pagina richiede solo la sessione e mi restituisce solo la sessione non crea altri cookie e mantiene il login correttamente. quindi credo che sia irrilevante passare anche il resto

    EDIT: posso postarvi lo spezzone di codice del form di login del sito che sto analizzando e l'header che riceve/invia se può essere di aiuto
    Ultima modifica di AspxTM; 05-01-2014 a 18:18

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    56
    Mi diceva un amico che trattandosi di servlet (avevo dimenticato di specificarlo) forse il procedimento di mantenimento della sessione è diverso?

  8. #8
    Ti ripeto, controlla il login ed assicurati che sia fatto correttamente. Se si, allora controlla se passi tutti i parametri corretti alle pagine, perchè magari la pagina non vuole solo la cookie con l'id di sessione per riconoscere se il login è stato fatto oppure ancora quando fai il POST non invii tutti i parametri necessari.

    Dipende tutto dal tuo codice, se fai bene il login ed il POST ... il lato server è trasparente per te
    lolide
    Java Programmer

    Informati

  9. #9
    Ciao AspxTM,

    come dice lolide il sito potrebbe verificare il login tramite diversi parametri e mancandogli non ti fa fare il login, magari non ti notifica che il parametro è mancante e ti svia dalla corretta via.

    Mi viene in mente un altro approccio ma mi servirebbe sapere qual'è il sito in questione, se posso, cosi da poter dare un occhiata e consigliarti meglio

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.