JDK 25 HttpClient no usa las rutas SOCKS del ProxySelector
Elija un transporte HTTP de Java que realmente admita SOCKS en lugar de confiar solo en el tipo que devuelve un ProxySelector.
Un objeto proxy de Java describe una ruta. El cliente de red sigue decidiendo qué tipos de ruta puede usar. Esto importa cuando el punto final disponible habla SOCKS y la aplicación usa java.net.http.HttpClient.
En la implementación de JDK 25 examinada aquí, el código de solicitud del cliente HTTP acepta un candidato HTTP del selector. Un candidato SOCKS no hace que realice la negociación SOCKS; la implementación puede continuar sin proxy. Por tanto, una respuesta correcta no basta como prueba de que se usó la entrada SOCKS de un selector personalizado.
Elija primero el transporte
Para una aplicación existente basada en URLConnection, se puede dar un proxy explícito compatible al manejador de protocolo al abrir la conexión:
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);
Para pruebas permitidas contra objetivos públicos, use un punto final SOCKS correspondiente de su servicio o de la lista de proxies SOCKS. Es una API de cliente distinta, no una forma alternativa de escribir HttpClient.Builder.proxy. Conserve la URL de destino para que HTTPS siga identificando el sitio previsto.
Una aplicación que deba conservar java.net.http puede usar en su lugar un punto final de proxy HTTP compatible, incluido un adaptador aprobado que gestione la conexión SOCKS posterior. Eso añade un componente real y otro límite de acceso; cambiar el puerto 8080 por el 1080 no aporta esa traducción.
Mantenga visibles la selección y la adopción
Registre tanto el resultado del selector como la conexión que el cliente abre realmente. El primero describe la salida de la política; el segundo establece si la implementación la adoptó.
Vincule las conclusiones al entorno de ejecución y al transporte utilizados. Las propiedades SOCKS de la JVM que usa una implementación de socket no son una promesa de que toda biblioteca HTTP las consulte. Cuando la ruta es obligatoria, conviene detectar un tipo de proxy no admitido antes de aceptar una solicitud directa aparentemente correcta.