JDK 25 HttpClient no utilitza les rutes SOCKS del ProxySelector
Trieu un transport HTTP de Java que admeti realment SOCKS en lloc de confiar només en el tipus que retorna un ProxySelector.
Un objecte proxy de Java descriu una ruta. El client de xarxa encara decideix quins tipus de ruta pot utilitzar. Això importa quan el punt final disponible parla SOCKS i l'aplicació utilitza java.net.http.HttpClient.
En la implementació de JDK 25 examinada aquí, el codi de petició del client HTTP accepta un candidat HTTP del selector. Un candidat SOCKS no fa que faci la negociació SOCKS; la implementació pot continuar sense proxy. Per tant, una resposta correcta no és prova suficient que s'hagi utilitzat l'entrada SOCKS d'un selector personalitzat.
Trieu primer el transport
Per a una aplicació existent basada en URLConnection, es pot donar un proxy explícit admès al gestor de protocol en obrir la connexió:
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);
Per a proves permeses amb objectius públics, utilitzeu un punt final SOCKS corresponent del vostre servei o de la llista de proxys SOCKS. Aquesta és una API de client diferent, no una escriptura alternativa de HttpClient.Builder.proxy. Conserva l'URL de destinació perquè HTTPS continuï identificant el lloc web previst.
Una aplicació que hagi de conservar java.net.http pot utilitzar en el seu lloc un punt final de proxy HTTP compatible, inclòs un adaptador aprovat que gestioni la connexió SOCKS posterior. Això afegeix un component real i una altra frontera d'accés; canviar el port 8080 pel 1080 no proporciona aquesta traducció.
Feu visibles la selecció i l'adopció
Registreu tant el resultat del selector com la connexió que el client obre realment. El primer descriu la sortida de la política; el segon estableix si la implementació l'ha adoptada.
Vinculeu les conclusions a l'entorn d'execució i al transport utilitzats. Les propietats SOCKS de JVM que utilitza una implementació de sòcol no són una promesa que totes les biblioteques HTTP les consultin. Quan la ruta és obligatòria, cal detectar un tipus de proxy no admès abans d'acceptar una petició directa aparentment correcta.