2010-07-19 16 views
6

Hey, ich versuche, die HTML von einer Twitter-Profilseite zu bekommen, aber httpurlconnection gibt nur einen kleinen Ausschnitt des HTML zurück. Mein Codejava httpurlconnection abschneiden html

for(int i = 0; i < urls.size(); i++) 
{ 
URL url = new URL(urls.get(i)); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6"); 
System.out.println(connection.getResponseCode()); 
String line; 
StringBuilder builder = new StringBuilder(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
while((line = reader.readLine()) != null) 
{ 
    builder.append(line); 
} 
String html = builder.toString(); 
} 

Ich bekomme immer 200 als Antwortcode für jeden Anruf. Jedoch wird etwa 1/3 der Zeit das gesamte HTML-Dokument zurückgegeben, und die andere Hälfte nur die ersten paar hundert Zeilen. Der Betrag, der zurückgegeben wird, wenn der HTML-Code abgeschnitten wird, ist nicht immer derselbe.

Irgendwelche Ideen? Danke für jede Hilfe!

Zusätzliche Info: Nach dem Anzeigen der Header scheint es, dass ich doppelte Content-Length-Header bekomme. Die erste ist die volle Länge, die andere ist viel kürzer (und wahrscheinlich repräsentativ für die Länge, die ich die meiste Zeit bekomme) Wie kann ich mit doppelten Headern umgehen?

+0

Ich würde den Code mit einer anderen URL versuchen. Ich vermute, dass Twitter-Server eine Art Lastregelung durchführen. –

+0

Zusätzliche Info: Nach dem Anzeigen der Header scheint es, dass ich doppelte Content-Length-Header bekomme. Die erste ist die volle Länge, die andere ist viel kürzer (und wahrscheinlich repräsentativ für die Länge, die ich die Zeit bekomme) Wie kann ich mit doppelten Headern umgehen? – JDetloff

Antwort

1

Dies funktionierte gut für mich, habe ich eine neue Zeile nach builder.append(line); es besser lesbar in der Konsole zu machen, aber anders als das es die ganze HTML-Code für diese Seite zurück:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

public class RetrieveHTML { 

    public static void main(String[] args) throws IOException { 
     List<String> urls = new ArrayList<String>(); 
     urls.add("http://stackoverflow.com/questions/3285077/java-httpurlconnection-cutting-off-html"); 

     for (int i = 0; i < urls.size(); i++) { 
      URL url = new URL(urls.get(i)); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6"); 
      System.out.println(connection.getResponseCode()); 
      String line; 
      StringBuilder builder = new StringBuilder(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      while ((line = reader.readLine()) != null) { 
       builder.append(line); 
       builder.append("\n"); 
      } 
      String html = builder.toString(); 
      System.out.println("HTML " + html); 
     } 

    } 
} 
meine HTTP-Klasse