Java httpurlconnection отрезать HTML - PullRequest
6 голосов
/ 20 июля 2010

Эй, я пытаюсь получить html со страницы профиля в твиттере, но httpurlconnection возвращает только небольшой фрагмент 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();
}

Я всегда получаю 200 в качестве кода ответа для каждого звонка. Однако примерно в 1/3 времени возвращается весь HTML-документ, а в другой половине - только первые несколько сотен строк. Сумма, возвращаемая при отсечении html, не всегда одинакова.

Есть идеи? Спасибо за любую помощь!

Дополнительная информация: После просмотра заголовков кажется, что я получаю дубликаты заголовков длины содержимого. Первый - это полная длина, другой - намного короче (и, вероятно, соответствует длине, которую я получаю некоторое время). Как я могу обрабатывать дублирующиеся заголовки?

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Для меня это работало нормально, после builder.append(line); я добавил новую строку, чтобы сделать его более читабельным в консоли, но кроме этого он вернул весь HTML для этой страницы:

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("/3792197/java-httpurlconnection-otrezat-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);
        }

    }
}
0 голосов
/ 22 марта 2012

Проверьте мой класс HTTP

https://stackoverflow.com/questions/9349378/java-net-httpurlconnection-returning-your-browsers-cookie-functionality-has-be

на основе этого API.Не стесняйтесь менять вещи.

...