JDK 25 HttpClient bruker ikke SOCKS-ruter fra ProxySelector
Velg en Java HTTP-transport som faktisk støtter SOCKS i stedet for bare å stole på typen en ProxySelector returnerer.
Et Java-proxyobjekt beskriver en rute. Nettverksklienten avgjør fortsatt hvilke typer ruter den kan bruke. Dette betyr noe når endepunktet som er tilgjengelig snakker SOCKS, og applikasjonen bruker java.net.http.HttpClient.
I JDK 25-implementasjonen som undersøkes her, godtar forespørselskoden til HTTP-klienten en HTTP-kandidat fra velgeren. En SOCKS-kandidat får den ikke til å utføre SOCKS-forhandling; implementasjonen kan fortsette uten proxy. En vellykket respons er derfor ikke tilstrekkelig bevis for at SOCKS-oppføringen til en tilpasset velger ble brukt.
Velg transporten først
For en eksisterende URLConnection-basert applikasjon kan protokollbehandleren få en støttet eksplisitt proxy når tilkoblingen åpnes:
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);
For tillatte tester mot offentlige mål, bruk et samsvarende SOCKS-endepunkt fra tjenesten din eller fra SOCKS-proxylisten. Dette er en annen klient-API, ikke en alternativ skrivemåte for HttpClient.Builder.proxy. Behold mål-URL-en slik at HTTPS fortsatt identifiserer det tiltenkte nettstedet.
En applikasjon som må beholde java.net.http, kan i stedet bruke et kompatibelt HTTP-proxyendepunkt, inkludert en godkjent adapter som håndterer den videre SOCKS-tilkoblingen. Det legger til en reell komponent og nok en tilgangsgrense; å endre port 8080 til 1080 gir ikke den oversettelsen.
Hold valg og overtakelse synlig
Registrer både resultatet fra velgeren og tilkoblingen klienten faktisk åpner. Det første beskriver policyutdata; det andre fastslår om implementasjonen tok det i bruk.
Knyt konklusjonene til kjøretidsmiljøet og transporten som brukes. JVM SOCKS-egenskaper som én socket-implementasjon bruker, er ikke et løfte om at hvert HTTP-bibliotek konsulterer dem. Når ruten er obligatorisk, bør en ustøttet proxytype oppdages før man godtar en tilsynelatende vellykket direkte forespørsel.