Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Gestione Cookies e URLConnection

    Sto cercando di accedere ad una specifica pagina di un sito web protetta da login.
    Dopo essermi autenticato, prelevo i cookies così:

    codice:
    for (int i=0; (headerName = conn.getHeaderFieldKey(i))!=null; i++) {
                if (headerName.equals("Set-Cookie"))                  
                            cookie = conn.getHeaderField(i);      
    }
    ottenendo una Stringa del tipo "PHPSESID=dn1uq3flasdwer34asfd".
    Per leggere il contenuto della pagina (salvandolo per comodità in un file html) utilizzo il seguente codice:
    codice:
     URL myUrl = new URL("https://sito/paginaProtetta.php"); 
    
    //Apro la connessione e setto i cookies
                URLConnection urlConn = myUrl.openConnection();
                String myCookies =cookie;
                urlConn.setRequestProperty("Cookie", myCookies);
                urlConn.connect();
    
    //Salvo il contenuto della pagina ottenuta
                BufferedReader bufrd = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
                InputStream is = urlConn.getInputStream(); 
                OutputStream os = new FileOutputStream("paginaSalvata.html"); 
                int s; 
                while((s=is.read()) != -1) { 
                os.write(s); } 
                is.close(); 
                os.close();
    Purtroppo però ottengo sempre e solo la pagina iniziale in cui mi viene chiesto di effettuare il login

    Dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Da Java 6 esiste la classe java.net.CookieManager che è utilizzabile insieme a java.net.CookieHandler (che esisteva già da Java 5).

    Ecco un esempio basilare:

    codice:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.CookieHandler;
    import java.net.CookieManager;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class ProvaCookie {
        public static void main(String[] args) {
            try {
                CookieManager cookieManager = new CookieManager();
                CookieHandler.setDefault(cookieManager);
    
                printGetJsonFromHttpUrl(new URL("http://httpbin.org/cookies/set?nome=Paolino&cognome=Paperino"));
                System.out.println("----------");
                printGetJsonFromHttpUrl(new URL("http://httpbin.org/cookies"));
                System.out.println("----------");
                printGetJsonFromHttpUrl(new URL("http://httpbin.org/cookies/set?luogoNascita=Paperopoli"));
                System.out.println("----------");
                printGetJsonFromHttpUrl(new URL("http://httpbin.org/cookies"));
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    
        public static void printGetJsonFromHttpUrl(URL url) throws IOException {
            HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
            httpUrlConn.setUseCaches(false);  // non applica il caching!
            httpUrlConn.setRequestProperty("Accept", "application/json");
    
            if (httpUrlConn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                System.out.println("Status code: " + httpUrlConn.getResponseCode());
                return;
            }
    
            InputStream is = httpUrlConn.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");   // JSON per default è in UTF-8
            BufferedReader br = new BufferedReader(isr);
            String line;
    
            try {
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
            } finally {
                br.close();
            }
        }
    }

    Provalo così come è. Vedrai che i cookie vengono mantenuti e passati di volta in volta con le varie request. Poi commenta/cancella la riga con il setDefault e vedrai che ... nessun cookie è mantenuto.

    Note:
    1) Ho usato i servizi di httpbin.org semplicemente perché permette facilmente di "giocare" un po' con HTTP.
    2) Quella sopra è chiaramente una applicazione standalone. Con le applet possono esserci "grane" in più, più che altro per le solite e note restrizioni (se non hai preso provvedimenti). Non ho modo adesso di fare prove con applet "vere" in un browser.
    Ultima modifica di andbin; 13-07-2016 a 16:53
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    [...]
    Ti ringrazio! Semplifica di molto il problema!

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.