Apache HttpClient 5.5 содержит путь настройки SOCKS в параметрах сокетов менеджера соединений. Его поддерживаемый пример использует setSocksProxyAddress:

InetSocketAddress socks =
    new InetSocketAddress("proxy.example.net", 1080);

PoolingHttpClientConnectionManager manager =
    PoolingHttpClientConnectionManagerBuilder.create()
        .setDefaultSocketConfig(
            SocketConfig.custom()
                .setSocksProxyAddress(socks)
                .build()
        )
        .build();

CloseableHttpClient client = HttpClients.custom()
    .setConnectionManager(manager)
    .build();

Фрагмент использует пакеты org.apache.hc из HttpClient 5 и SocketConfig из HttpCore. Запросы, выполняемые этим клиентом, используют пул, настроенный выше. Закройте клиент, когда область владения приложения заканчивается.

Поместите фактический URL сайта в запрос как обычно. Для разрешённых запросов к публичным сайтам без аутентификации прокси список SOCKS-прокси предлагает адреса-кандидаты; выберите версию SOCKS, поддерживаемую фактической средой выполнения. Адрес SOCKS настраивает транспорт, используемый для доступа к нему; это не маршрут перенаправляющего HTTP-прокси, переданный как HttpHost.

Это параметры сокетов по умолчанию для данного менеджера. Приложение, использующее распознаватель SocketConfig для каждого маршрута, должно применять нужную настройку SOCKS через эту политику. Пример сохраняет обычную политику DNS назначения менеджера соединений; удалённое разрешение имён требует отдельно проверенной конфигурации.

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