Как мне многократно читать из HttpURLConnection? - PullRequest
0 голосов
/ 11 марта 2011

Я написал программу на Java, которая удаляет часть содержимого с веб-страницы.Он извлекает содержимое, вызывая метод readWebPage каждые пару секунд.Проблема в том, что на самом деле работает только первое чтение.После первого чтения веб-страницы InputStream всегда кажется пустым (in.ready() return false).

Кроме того, conn.getContentLength() каждый раз возвращает одно и то же значение, даже если содержимоена странице изменилось.Если я перезапущу программу, новый контент будет загружен правильно.

Что я пропустил?Нужно ли выполнять какое-то обновление для объекта conn?

private String readWebpage(HttpURLConnection conn) throws IOException{
            conn.connect();
            InputStreamReader in = new InputStreamReader((InputStream) conn.getContent());
            BufferedReader buffer = new BufferedReader(in);
            StringBuilder b = new StringBuilder(conn.getContentLength()+5);
            String line;
            while ((line=buffer.readLine())!=null){
                b.append(line);
            }
            in.close();
            buffer.close();
            return b.toString();
    }

Ответы [ 2 ]

4 голосов
/ 12 марта 2011

Вы передаете один и тот же объект HttpURLConnection каждый раз?Если да, то, поскольку InputStream привязан к базовому HTTP-соединению, вы будете каждый раз получать один и тот же InputStream, а не новый поток для рассматриваемого URL.Откройте новое соединение (URL # openConnection), прежде чем передавать его этому методу, и все будет хорошо.

0 голосов
/ 12 марта 2011

После прочтения всего экрана, что еще можно прочитать?Одно сообщение get или post не может привести к нескольким передачам с сервера.Он отправляет одно сообщение назад, конец истории.

Если экран все еще обновляется, то либо (а) ввод не завершен, либо (б) дальнейшие обновления - это что-то иное, чем HTML, например, естьапплет или функция Javascript, которая общается с сервером или что-то подобное.

Я думаю, что BufferedReader.readLine блокирует, пока еще поступает ввод, поэтому я не думаю, что это может быть (а).Если ситуация (б), чтение HTML больше не поможет: это не изменится.

...