jsoup может загрузить страницу через HTTP-прокси и разобрать ответ в том же вызове:

Document page = Jsoup.connect("https://www.example.com/")
    .proxy("proxy.example", 8080)
    .get();

Имя хоста и целочисленный порт идентифицируют прокси. Для разрешённых запросов к публичным страницам выберите HTTP-эндпоинт из вашего сервиса или из списка HTTP-прокси. URL, переданный в connect, остаётся нужной вам страницей. Чтобы добавить этот маршрут, не нужно скачивать HTML в строку через отдельный URLConnection.

proxy(String, int) выбирает HTTP-прокси для этого запроса. Номер порта вроде 1080 не меняет протокол на SOCKS; эндпоинт прокси должен поддерживать настраиваемый тип. jsoup также предоставляет перегрузку, принимающую java.net.Proxy, но поддержка конкретного маршрута по-прежнему зависит от используемой реализации HTTP.

Дайте каждому обработчику собственный запрос

Опция на уровне запроса упрощает параллельную работу по сравнению с изменением системных свойств JVM вокруг каждой загрузки. Держите изменяемый запрос отдельно для каждого обработчика. Современный jsoup умеет разделять настройки и хранилище cookie сеанса, создавая новый запрос:

Connection session = Jsoup.newSession();
Document first = session.newRequest()
    .url("https://www.example.com/one")
    .proxy("proxy-a.example", 8080)
    .get();
Document second = session.newRequest()
    .url("https://www.example.com/two")
    .proxy("proxy-b.example", 8080)
    .get();

Вызовы выше выполняются последовательно ради наглядности. Если работа распределяется одновременно, создавайте запросы независимо, а не меняйте прокси у одного выполняющегося Connection. Общий сеанс разделяет и cookie; используйте разные сеансы, когда идентичности просмотра должны оставаться раздельными.

Эти интерфейсы присутствуют в jsoup 1.21.2. Интерфейс newRequest() без аргументов появился в 1.14.1, поэтому более старое приложение должно проверить зависимость, прежде чем применять пример с сеансом.

Учётные данные — дополнительное требование для аутентифицированного прокси. Успешный выбор маршрута не предоставляет учётную запись, а получение запроса аутентификации от прокси отличается от невозможности подключиться к его порту.

Похожие статьи