В Java можно определить размер веб-страницы перед загрузкой? - PullRequest
1 голос
/ 05 мая 2011

Я хочу определить размер веб-страницы, и поэтому, если он больше, чем число (например, 5 МБ), я буду загружать его или нет. Могу ли я получить эту информацию?

Ответы [ 2 ]

6 голосов
/ 05 мая 2011

Вы можете сделать приличное приближение с помощью:

HttpURLConnection content = (HttpURLConnection) new URL("www.example.com").openConnection();
System.out.println(content.getContentLength());

Однако это будет указывать только длину определенного ресурса, который вы запрашиваете (например, HTML в базе URL). Вам также потребуется для просмотра HTML-кода на странице, просмотра всех ресурсов, на которые она ссылается (сценарии с других сайтов, изображения, видео и т. Д.), И суммирования их всех.

Это приблизит вас к общему размеру, но даже тогда вы не получите идеальный счет, потому что (а) не все URL будут возвращать эту информацию, и вы не имеете никакого контроля над этим, и (b) в зависимости от того, как загружается контент (например, с помощью вызовов AJAX, скрывающих подробности), вы не сможете заранее узнать полный список загружаемых ресурсов.

В качестве альтернативы, если URL не возвращает результат, я думаю, что Giacomo предлагал использовать CounterInputStream. Неплохая идея. Возможно, вы могли бы объединить вышеупомянутое предложение с CounterInputStream, чтобы вести подсчет суммы, которая была отправлена, и потенциально остановить передачу, когда она достигает указанного максимального общего размера передачи. Таким образом, вы, по сути, будете иметь прогнозируемый размер (скажем, сайт сообщает, что он будет 3,3 МБ), но при загрузке вы обнаруживаете, что на самом деле это 6 МБ и еще не остановился, и принимаете решение: больше не скачивать.

4 голосов
/ 05 мая 2011

Я могу ошибаться, но вы не можете просто использовать

HttpURLConnection conn = (HttpURLConnection) new URL("http://www.google.com").openConnection();
System.out.println(conn.getContentLength());

?

...