JDK 25 HttpClient non usa as rutas SOCKS do ProxySelector
Escolla un transporte HTTP de Java que admita realmente SOCKS en lugar de confiar só no tipo que devolve un ProxySelector.
Un obxecto proxy de Java describe unha ruta. O cliente de rede segue decidindo que tipos de ruta pode usar. Isto importa cando o punto final dispoñible fala SOCKS e a aplicación usa java.net.http.HttpClient.
Na implementación de JDK 25 examinada aquí, o código de solicitude do cliente HTTP acepta un candidato HTTP do selector. Un candidato SOCKS non fai que realice a negociación SOCKS; a implementación pode continuar sen proxy. Polo tanto, unha resposta correcta non é proba suficiente de que se usou a entrada SOCKS dun selector personalizado.
Escolla primeiro o transporte
Para unha aplicación existente baseada en URLConnection, pódese dar un proxy explícito compatible ao xestor de protocolo ao abrir a 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 probas permitidas contra obxectivos públicos, use un punto final SOCKS correspondente do seu servizo ou da lista de proxies SOCKS. É unha API de cliente distinta, non unha forma alternativa de escribir HttpClient.Builder.proxy. Conserve o URL de destino para que HTTPS siga identificando o sitio previsto.
Unha aplicación que deba conservar java.net.http pode usar no seu lugar un punto final de proxy HTTP compatible, incluído un adaptador aprobado que xestione a conexión SOCKS posterior. Iso engade un compoñente real e outro límite de acceso; cambiar o porto 8080 polo 1080 non fornece esa tradución.
Manteña visibles a selección e a adopción
Rexistre tanto o resultado do selector como a conexión que o cliente abre realmente. O primeiro describe a saída da política; o segundo establece se a implementación a adoptou.
Vincule as conclusións á contorna de execución e ao transporte utilizados. As propiedades SOCKS da JVM que usa unha implementación de socket non son unha promesa de que toda biblioteca HTTP as consulte. Cando a ruta é obrigatoria, debería detectarse un tipo de proxy non compatible antes de aceptar unha solicitude directa aparentemente correcta.