2009-09-21 11 views
8

Ich versuche, eine Anfrage an eine Webseite zu stellen, die Cookies benötigt. Ich verwende HttpURLConnection, aber die Antwort immer sagen, kommt zurückCookies deaktiviert mit Java URLConnection

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

Wie kann ich die Anforderung so machen, dass der abgefragte Server denkt, dass ich haben Cookies eingeschaltet. Mein Code geht ungefähr so.

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(); 
} 

Antwort

10

Sie benötigen einen CookieHandler zum System hinzuzufügen, um es Cookie zu behandeln. Vor Java 6 gibt es keine CookieHandler-Implementierung in der JRE, Sie müssen Ihre eigene schreiben. Wenn Sie auf Java 6 sind, können Sie dies tun,

CookieHandler.setDefault(new CookieManager()); 

URLConnection Cookie-Handhabung ist wirklich schwach. Es funktioniert kaum. Es behandelt nicht alle Cookie-Regeln korrekt. Sie sollten Apache HttpClient verwenden, wenn Sie mit sensiblen Cookies wie der Authentifizierung zu tun haben.

+0

jetzt muss ich herausfinden, wie man HTTP-Proxy-Authentifizierung. Ich hatte es mit URLConnection arbeiten, aber jetzt muss ich es hier herausfinden. Tsok, Google wird prolly etwas für mich finden;) Danke! – 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

Wenn Sie versuchen, große Datenmengen nach einer Anmeldung zu scrappen, können Sie mit einem Web Scarper wie WebHarvest (http://web-harvest.sourceforge.net/) sogar besser dran sein. Ich habe ihn in einigen meiner eigenen Projekte sehr erfolgreich eingesetzt.

2

Ich denke Server kann nicht bei der ersten Anfrage feststellen, dass ein Client Cookies nicht unterstützt. Also, wahrscheinlich sendet der Server Weiterleitungen. Versuchen Sie Umleitungen zu deaktivieren:

uc.setInstanceFollowRedirects(false); 

Dann werden Sie in der Lage Cookies von Antwort zu bekommen und nutzen sie (wenn Sie benötigen) auf die nächste Anforderung.

Verwandte Themen