2009-09-21 19 views
8

Sto tentando di effettuare una richiesta a una pagina Web che richiede i cookie. Sto utilizzando HttpURLConnection, ma la risposta viene sempre indietro dicendoCookie disattivati ​​con Java URLConnection

<div class="body"><p>Your browser's cookie functionality is turned off. Please turn it on. 

Come posso fare la richiesta in modo tale che il server interrogato pensa che ho attivato i cookie. Il mio codice va in questo modo.

private String readPage(String page) throws MalformedURLException { 
    try { 
     URL url = new URL(page); 
     HttpURLConnection uc = (HttpURLConnection) url.openConnection(); 
     uc.connect(); 

     InputStream in = uc.getInputStream(); 
     int v; 
     while((v = in.read()) != -1){ 
      sb.append((char)v); 
     } 
     in.close(); 
     uc.disconnect(); 
    } catch (IOException e){ 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 

risposta

10

è necessario aggiungere un CookieHandler al sistema per maneggia biscotto. Prima di Java 6, non vi è alcuna implementazione di CookieHandler in JRE, devi scrivere la tua. Se sei su Java 6, puoi farlo,

CookieHandler.setDefault(new CookieManager()); 

La gestione dei cookie di URLConnection è molto debole. Funziona a malapena. Non gestisce tutte le regole dei cookie correttamente. Dovresti usare Apache HttpClient se hai a che fare con cookie sensibili come l'autenticazione.

+0

ora ho bisogno di capire come fare l'autenticazione del proxy http. l'ho fatto funzionare con URLConnection, ma ora ho bisogno di capirlo qui. tsok, google troverà sempre qualcosa per me;) grazie! – dharga

1
uc.getHeaderFields() 
// get cookie (set-cookie) here 

URLConnection conn = url.openConnection(); 
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2"); 
conn.addRequestProperty("Referer", "http://xxxx"); 
conn.addRequestProperty("Cookie", "..."); 
-4

Se si sta tentando di analizzare grandi volumi di dati dopo un accesso, si può anche star meglio con un raschiatore web con script come WebHarvest (http://web-harvest.sourceforge.net/). L'ho usato con grande successo in alcuni dei miei progetti.

2

Penso che il server non possa determinare alla prima richiesta che un client non supporta i cookie. Quindi, probabilmente il server invia i reindirizzamenti. Tenta di disattivare redirect:

uc.setInstanceFollowRedirects(false); 

allora si sarà in grado di ottenere i cookie dalla risposta e utilizzarli (se avete bisogno) per la richiesta successiva.

Problemi correlati