Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di nicco86
    Registrato dal
    Jun 2007
    Messaggi
    173

    Leggere contenuto pagina web che necessita di login

    Salve,
    sto cercando di fare un programma che va a leggere i dati di una pagina web (e fino a qui non ho nessun problema) però per poter leggere il contenuto della pagina è necessario essere loggati, io posseggo user e password, ho provato con httpURLconnection ma non sono riuscito a farmi riconoscere.
    Se può esservi utile posso postarvi il codice del form di login della pagina che volgio leggere,

    grazie mille

  2. #2
    Per effettuare il login puoi usare qualcosa del tipo:

    Codice PHP:
    StringBuffer parameters = new StringBuffer();
    parameters.append("username="+username);
    parameters.append("&password="+password);
    String JsessionID
    try {             
          
    URL url = new URL(loginUrl);             
          
    HttpURLConnection con = (HttpURLConnectionurl.openConnection();
          
    con.setDoInput(true);             
          
    con.setDoOutput(true);             
          
    con.setRequestMethod("GET");            
          
    OutputStream os con.getOutputStream();
          
    InputStream is con.getInputStream();             
          
    os.write(parameters.toString().getBytes());             
          
    os.close();             
          
    int status con.getResponseCode();
          
    //ricava una stringa da is ed estrai il valore di JSESSIONID
          
    ...
          
    JsessionID = ...;               
          
    con.disconnect();          
    } catch (
    ProtocolException ex) {....} 
    ovviamente per accedere poi alla pagina che necessita di login ti devi far riconoscere usando il "parametro" JSESSIONID che ti viene restituito con la prima richiesta. Tale JSESSIONID va concatenato all'url della seconda richiesta nel seguente modo:

    Codice PHP:
    http://aaa.bb/c;JSESSIONID=....?param1=1&param2=2 
    JSESSIONID in genere viene restituito tramite un cookie. Ci sono modi piu puliti di ricavarlo, ma usando HttpURLConnection puoi ottenerlo parsando l'InputStream della HttpURLConnection.
    A questo punto puoi creare una nuova HttpURLConnection nel seguente modo

    Codice PHP:
    String content;
    try {        
          
    Stirng myPageUrl="http://aaa.bb/c;JSESSIONID="+JsessionID+"?param1=1&param2=2";     
          
    URL url = new URL(myPageUrl);             
          
    HttpURLConnection con = (HttpURLConnectionurl.openConnection();
          
    con.setDoInput(true);             
          
    con.setDoOutput(true);             
          
    con.setRequestMethod("GET"); 
          
    InputStream is con.getInputStream();
          
    int status con.getResponseCode();
          
    //ricava il contenuto della pagina da is
          
    content = ...;                  
          
    con.disconnect();          
    } catch (
    ProtocolException ex) {....} 
    ciao.

  3. #3
    Utente di HTML.it L'avatar di nicco86
    Registrato dal
    Jun 2007
    Messaggi
    173
    Grazie per la risposta, ho visto che usi GET ma il form in questione usa POST.
    Vuoi che ti fornisca la pagina in questione?

  4. #4
    Puoi tranquillamente sostituire GET con POST. Prova ad applicare quello che ti ho detto e se ci sono problemi fammi sapere.
    ciao

  5. #5
    Utente di HTML.it L'avatar di nicco86
    Registrato dal
    Jun 2007
    Messaggi
    173
    ma quando mi loggo io nella URL non vedo roba tipo http://aaa.bb/c;JSESSIONID="+JsessionID+"?param1=1&param2=2"; ma la URL resta "pulita"

  6. #6
    http://aaa.bb/c è l url della pagina che vuoi leggere e che necessita di login. Alla stringa rappresentativa ti tale url devi concatenare, prima dei parametri (se eventualmente ce ne sono) la stringa ";JSESSIONID=asbdf..." e ottenere cosi un url del tipo:

    Codice PHP:
     [url]http://aaa.bb/c;JSESSIONID=[/url]"+JsessionID+"?param1=1&param2=2 

  7. #7
    Utente di HTML.it L'avatar di nicco86
    Registrato dal
    Jun 2007
    Messaggi
    173
    JsessionID = ...;
    ma come inizializzo JsessionID?

  8. #8
    L'ho scritto nel primo post... Apri un InputStream da HttpURLConnection, ne leggi il contenuto salvandolo in una stringa e all'interno di questa stringa da qualche parte ci sarà qualcosa tipo "JSESSIONID=..." quindi il valore di JSESSIONID puoi ricavarlo attraverso i classici metodi di manipolazione delle stringhe.

  9. #9
    Utente di HTML.it L'avatar di nicco86
    Registrato dal
    Jun 2007
    Messaggi
    173
    ok...
    ho provato sfruttando del codice trovato nel forum:
    codice:
     int r;
    		      //stream su cui memorizzare i dati letti
    	            ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    	            while ((r = is.read()) != -1)
    	            {
    	                bos.write(r);
    	            } 
    	            //conversione in array di byte
    	            byte[] data = bos.toByteArray();
    
    	            //conversione in stringa
    	            System.out.println(new String(data));
    Però mi stampa nella console la pagina di errore di login non corretto, perciò niente JSESSIONID...dove sbaglio?

    grazie per la pazienza

  10. #10
    Scusa ho sbagliato. Il valore di JSESSIONID lo puoi prelevare con il metodo httpURLConnection.getHeaderField("Set-Cookie"), mi stavo confondendo con le Socket. Comunque la sostanza non cambia. Quando accedi al server e richiedi la pagina di login, il server alla risposta setta un header di nome "Set-Cookie" con valore una stringa (che sarà il valore del nostro JSESSIONID). Alla richiesta successiva il client deve inviare al server questo valore per permettere al server di associargli la sessione in precedenza aperta. Per capire cosa fare di preciso fai una ricerca con le parole chiave "jsessionid" e "httpurlconnection". Se ti puo servire dai un occhio anche alle funzionalità della calsse WebConversation che si trova nelle API HTTPUnit.
    Ciao.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.