2010-07-19 17 views
6

Hey, estoy tratando de conseguir el código HTML de una página de perfil de Twitter, pero HttpURLConnection sólo es devolver un pequeño fragmento del HTML. Mi códigojava HttpURLConnection cortando 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(); 
} 

Siempre obtengo 200 como código de respuesta para cada llamada. Sin embargo, aproximadamente 1/3 de las veces se devuelve todo el documento html, y la otra mitad solo las primeras cientos líneas. La cantidad devuelta cuando el html está cortado no es siempre el mismo.

¿Alguna idea? ¡Gracias por cualquier ayuda!

Información adicional: Después de ver las cabeceras parece que estoy recibiendo cabeceras Content-Length duplicados. El primero es el largo completo, el otro es mucho más corto (y probablemente representativo de la longitud que obtengo parte del tiempo) ¿Cómo puedo manejar los encabezados duplicados?

+0

me gustaría probar el código con una URL diferente. Sospecho que los servidores de Twitter hacen algún tipo de regulación de carga. –

+0

Información adicional: Después de ver los encabezados, parece que obtengo encabezados de longitud de contenido duplicados. La primera es la longitud total, el otro es mucho más corto (y probablemente representativo de la longitud que estoy recibiendo una parte del tiempo) Cómo puedo manipular los encabezados duplicados? – JDetloff

Respuesta

1

Esto funcionó bien para mí, he añadido una nueva línea después de builder.append(line); para que sea más fácil de leer en la consola, pero aparte de eso volvió todo el HTML de esta página:

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

    } 
} 
Cuestiones relacionadas