JDK 25 HttpClient bruger ikke SOCKS-ruter fra ProxySelector
Vælg en Java HTTP-transport, der faktisk understøtter SOCKS, i stedet for kun at stole på den type, en ProxySelector returnerer.
Et Java-proxyobjekt beskriver en rute. Netværksklienten afgør stadig, hvilke slags ruter den kan bruge. Det betyder noget, når det tilgængelige endepunkt taler SOCKS, og applikationen bruger java.net.http.HttpClient.
I den JDK 25-implementering, der undersøges her, accepterer HTTP-klientens anmodningskode en HTTP-kandidat fra vælgeren. En SOCKS-kandidat får den ikke til at udføre SOCKS-forhandling; implementeringen kan fortsætte uden en proxy. Et vellykket svar er derfor ikke tilstrækkeligt bevis for, at en tilpasset vælgers SOCKS-post blev brugt.
Vælg transporten først
For en eksisterende URLConnection-baseret applikation kan protokolhåndteringen få en understøttet eksplicit proxy, når forbindelsen åbnes:
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);
Til tilladte tests af offentlige mål skal du bruge et matchende SOCKS-endepunkt fra din tjeneste eller fra SOCKS-proxylisten. Dette er en anden klient-API, ikke en alternativ stavemåde for HttpClient.Builder.proxy. Bevar destinations-URL'en, så HTTPS fortsat identificerer det tilsigtede websted.
En applikation, der skal beholde java.net.http, kan i stedet bruge et kompatibelt HTTP-proxyendepunkt, herunder en godkendt adapter, der håndterer den videre SOCKS-forbindelse. Det tilføjer en reel komponent og endnu en adgangsgrænse; at ændre port 8080 til 1080 giver ikke den oversættelse.
Hold valg og overtagelse synlige
Registrér både vælgerens resultat og den forbindelse, klienten faktisk åbner. Det første beskriver politikoutput; det andet fastslår, om implementeringen overtog det.
Bind konklusioner til det kørte runtime og den transport, der bruges. JVM SOCKS-egenskaber, som en socket-implementering bruger, er ikke et løfte om, at hver HTTP-bibliotek konsulterer dem. Når ruten er obligatorisk, bør en ikke-understøttet proxytype opdages, før man accepterer en tilsyneladende vellykket direkte anmodning.