Я работаю над проектом сканирования. Когда я выполняю простое подключение URLConnection к веб-сайту, как показано ниже:
URLConnection conn = new URL(url).openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Метод правильно возвращает тело HTML. Однако веб-сайт делает внутренние запросы для некоторых полей. Например, веб-сайт получает общее количество пользователей из другой веб-службы. В веб-браузере общее количество пользователей появляется через некоторое время, но с методом URLConnection не дожидается общего количества пользователей, и возвращаемый HTML не содержит такого поля.
В Java есть способ подождать некоторое время, чтобы получить все данные с веб-сайта с помощью URLConnection.




Обычно, если вы получаете тело html страницы, все вызовы, сделанные на стороне сервера этого веб-сайта, должны быть выполнены.
Если на сайте нет Javascript, используйте библиотеку Jsoup (https://jsoup.org) для Java. Он загружает все внутренние HTML-запросы, необходимые для рендеринга окончательной HTML-страницы.
Из вашего комментария «внутренние запросы» похоже, что веб-сайт использует JavaScript (через фреймворк или просто с помощью собственных API-интерфейсов браузера) для извлечения данных и отображения этих результатов в ДОМ. В настоящее время это очень часто встречается с СПА и т. д.
Если это так, никакое ожидание не изменит результат использования простой HTTP-библиотеки, такой как URLConnection, - но вы можете проверить это, сохранив HTML локально и просмотрев его в своем браузере - что происходит? Когда вы его изучаете, есть ли на этой странице JavaScript?
Чтобы сделать это правильно в коде, вам понадобится что-то, способное вести себя больше как браузер и выполнять этот JS, на который ссылается HTML, в DOM-подобной среде. Попробуйте Селен с PhantomJS или безголовым Chrome / Firefox, или, может быть, GhostDriver.
Интересно, что когда я отлаживаю код, URLConnection возвращает полное тело, но во время выполнения нет.
В противном случае это означает, что сервер все еще обрабатывает страницу для вывода html.