Http URLConnection ждет внутреннего запроса

Я работаю над проектом сканирования. Когда я выполняю простое подключение URLConnection к веб-сайту, как показано ниже:

URLConnection conn = new URL(url).openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

Метод правильно возвращает тело HTML. Однако веб-сайт делает внутренние запросы для некоторых полей. Например, веб-сайт получает общее количество пользователей из другой веб-службы. В веб-браузере общее количество пользователей появляется через некоторое время, но с методом URLConnection не дожидается общего количества пользователей, и возвращаемый HTML не содержит такого поля.

В Java есть способ подождать некоторое время, чтобы получить все данные с веб-сайта с помощью URLConnection.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
540
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Обычно, если вы получаете тело html страницы, все вызовы, сделанные на стороне сервера этого веб-сайта, должны быть выполнены.

В противном случае это означает, что сервер все еще обрабатывает страницу для вывода html.

golyadkin 31.07.2018 22:08

Если на сайте нет Javascript, используйте библиотеку Jsoup (https://jsoup.org) для Java. Он загружает все внутренние HTML-запросы, необходимые для рендеринга окончательной HTML-страницы.

Ответ принят как подходящий

Из вашего комментария «внутренние запросы» похоже, что веб-сайт использует JavaScript (через фреймворк или просто с помощью собственных API-интерфейсов браузера) для извлечения данных и отображения этих результатов в ДОМ. В настоящее время это очень часто встречается с СПА и т. д.

Если это так, никакое ожидание не изменит результат использования простой HTTP-библиотеки, такой как URLConnection, - но вы можете проверить это, сохранив HTML локально и просмотрев его в своем браузере - что происходит? Когда вы его изучаете, есть ли на этой странице JavaScript?

Чтобы сделать это правильно в коде, вам понадобится что-то, способное вести себя больше как браузер и выполнять этот JS, на который ссылается HTML, в DOM-подобной среде. Попробуйте Селен с PhantomJS или безголовым Chrome / Firefox, или, может быть, GhostDriver.

Интересно, что когда я отлаживаю код, URLConnection возвращает полное тело, но во время выполнения нет.

cagryInside 31.07.2018 22:32

Другие вопросы по теме