A JDK 25 HttpClient nem használja a ProxySelector SOCKS-útvonalait
Válasszon olyan Java HTTP-szállítást, amely valóban támogatja a SOCKS-t, ahelyett hogy kizárólag a ProxySelector által visszaadott típusra hagyatkozna.
A Java proxyobjektum egy útvonalat ír le. A hálózati kliens továbbra is eldönti, milyen típusú útvonalakat használhat. Ez akkor számít, amikor az elérhető végpont SOCKS-t beszél, és az alkalmazás java.net.http.HttpClient-ot használ.
Az itt vizsgált JDK 25 implementációban a HTTP-kliens kéréskódja HTTP-jelöltet fogad el a szelektortól. A SOCKS-jelölt nem készteti SOCKS-egyeztetésre; az implementáció proxy nélkül folytatódhat. Ezért egy sikeres válasz nem elegendő bizonyíték arra, hogy egy egyéni szelektor SOCKS-bejegyzését használták.
Először a szállítást válassza
Egy meglévő URLConnection-alapú alkalmazás esetében a protokollkezelő kaphat támogatott, explicit proxyt a kapcsolat megnyitásakor:
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);
Engedélyezett nyilvános célú tesztekhez használjon megfelelő SOCKS-végpontot a szolgáltatásából vagy a SOCKS proxy listából. Ez más kliens API, nem a HttpClient.Builder.proxy alternatív írásmódja. Tartsa meg a cél URL-t, hogy a HTTPS továbbra is azonosítsa a kívánt webhelyet.
Az az alkalmazás, amelynek meg kell tartania a java.net.http-t, használhat helyette kompatibilis HTTP-proxy végpontot, beleértve egy jóváhagyott adaptert, amely a további SOCKS-kapcsolatot kezeli. Ez valódi komponenst és még egy hozzáférési határt ad hozzá; a 8080-as port 1080-ra cserélése nem nyújtja ezt a lefordítást.
Tartsa láthatóvá a kiválasztást és az átvételt
Rögzítse a szelektor eredményét és a kliens által ténylegesen megnyitott kapcsolatot is. Az első a szabályzat kimenetét írja le; a második megállapítja, hogy az implementáció átvette-e.
Kösse a következtetéseket a használt futtatókörnyezethez és szállításhoz. Az egy socket-implementáció által használt JVM SOCKS-tulajdonságok nem ígérik meg, hogy minden HTTP-könyvtár ezeket kérdezi. Ha az útvonal kötelező, a nem támogatott proxytípust a látszólag sikeres közvetlen kérés elfogadása előtt fel kell ismerni.