Объект прокси в Java описывает маршрут. Сетевой клиент по-прежнему сам решает, какие виды маршрутов он может использовать. Это важно, когда доступная конечная точка говорит по SOCKS, а приложение использует java.net.http.HttpClient.

В рассмотренной здесь реализации JDK 25 код запроса HTTP-клиента принимает HTTP-кандидата от селектора. Кандидат SOCKS не заставляет его выполнять согласование SOCKS; реализация может продолжить без прокси. Поэтому успешный ответ не является достаточным доказательством того, что была использована запись SOCKS пользовательского селектора.

Сначала выберите транспорт

Для существующего приложения на основе URLConnection обработчику протокола можно передать поддерживаемый явный прокси при открытии соединения:

Proxy route = new Proxy(Proxy.Type.SOCKS,
    new InetSocketAddress("proxy.example", 1080));
URLConnection connection = URI.create("https://service.example/")
    .toURL().openConnection(route);
connection.setConnectTimeout(5000);
connection.setReadTimeout(15000);

Для разрешённых тестов на публичных целях используйте подходящую конечную точку SOCKS из вашего сервиса или из списка SOCKS-прокси. Это другой клиентский API, а не альтернативное написание HttpClient.Builder.proxy. Сохраняйте URL назначения, чтобы HTTPS продолжал определять нужный сайт.

Приложение, которому необходимо сохранить java.net.http, может вместо этого использовать совместимую конечную точку HTTP-прокси, включая одобренный адаптер, который обрабатывает дальнейшее соединение SOCKS. Это добавляет реальный компонент и ещё одну границу доступа; смена порта 8080 на 1080 такого преобразования не даёт.

Держите выбор и принятие видимыми

Записывайте и результат селектора, и соединение, которое клиент фактически открывает. Первое описывает вывод политики; второе устанавливает, приняла ли его реализация.

Связывайте выводы с используемой средой выполнения и транспортом. Свойства JVM SOCKS, используемые одной реализацией сокета, не являются обещанием, что каждая HTTP-библиотека к ним обращается. Когда маршрут обязателен, неподдерживаемый тип прокси следует обнаруживать до принятия внешне успешного прямого запроса.

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