JDK 25 HttpClient använder inte SOCKS-rutter från ProxySelector
Välj en Java HTTP-transport som faktiskt stöder SOCKS i stället för att bara lita på den typ som en ProxySelector returnerar.
Ett Java-proxyobjekt beskriver en rutt. Nätverksklienten avgör fortfarande vilka typer av rutter den kan använda. Det spelar roll när den tillgängliga slutpunkten talar SOCKS och programmet använder java.net.http.HttpClient.
I den JDK 25-implementering som undersöks här accepterar HTTP-klientens förfrågningskod en HTTP-kandidat från väljaren. En SOCKS-kandidat får den inte att utföra SOCKS-förhandling; implementeringen kan fortsätta utan proxy. Ett lyckat svar är därför inte tillräckligt bevis för att en anpassad väljares SOCKS-post användes.
Välj transporten först
För ett befintligt URLConnection-baserat program kan protokollhanteraren få en stödd explicit proxy när anslutningen öppnas:
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);
För tillåtna tester mot offentliga mål, använd en matchande SOCKS-slutpunkt från din tjänst eller från SOCKS-proxylistan. Detta är ett annat klient-API, inte en alternativ stavning av HttpClient.Builder.proxy. Behåll mål-URL:en så att HTTPS fortsätter att identifiera den avsedda webbplatsen.
Ett program som måste behålla java.net.http kan i stället använda en kompatibel HTTP-proxyslutpunkt, inklusive en godkänd adapter som hanterar den vidare SOCKS-anslutningen. Det lägger till en verklig komponent och ännu en åtkomstgräns; att ändra port 8080 till 1080 ger inte den översättningen.
Håll val och övertagande synliga
Registrera både väljarens resultat och den anslutning som klienten faktiskt öppnar. Det första beskriver policyutdata; det andra fastställer om implementeringen övertog den.
Knyt slutsatser till den körmiljö och transport som används. JVM SOCKS-egenskaper som en socket-implementering använder är inte ett löfte att varje HTTP-bibliotek rådfrågar dem. När rutten är obligatorisk bör en proxytyp som inte stöds upptäckas innan en till synes lyckad direkt förfrågan accepteras.