JDK 25 HttpClient gebruik nie SOCKS ProxySelector-roetes nie
Kies 'n Java HTTP-transport wat SOCKS werklik ondersteun eerder as om net op die tipe te vertrou wat 'n ProxySelector teruggee.
'n Java-proksiobjek beskryf 'n roete. Die netwerkklant besluit steeds watter soorte roetes dit kan gebruik. Dit maak saak wanneer die beskikbare eindpunt SOCKS praat en die toepassing java.net.http.HttpClient gebruik.
In die JDK 25-implementering wat hier ondersoek word, aanvaar die HTTP-kliënt se versoekkode 'n HTTP-kandidaat van die selekteerder. 'n SOCKS-kandidaat veroorsaak nie dat dit SOCKS-onderhandeling uitvoer nie; die implementering kan sonder 'n proksi voortgaan. 'n Suksesvolle antwoord is dus onvoldoende bewys dat 'n pasgemaakte selekteerder se SOCKS-inskrywing gebruik is.
Kies eers die transport
Vir 'n bestaande toepassing wat op URLConnection gebaseer is, kan die protokolhanteerder 'n ondersteunde eksplisiete proksi kry wanneer die verbinding oopgemaak word:
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);
Vir toegelate toetse op publieke teikens, gebruik 'n passende SOCKS-eindpunt van jou diens of die SOCKS-proksilys. Dit is 'n ander kliënt-API, nie 'n alternatiewe spelling van HttpClient.Builder.proxy nie. Behou die bestemming-URL sodat HTTPS steeds die beoogde webwerf identifiseer.
'n Toepassing wat java.net.http moet behou, kan eerder 'n versoenbare HTTP-proksi-eindpunt gebruik, insluitend 'n goedgekeurde adapter wat die verdere SOCKS-verbinding hanteer. Dit voeg 'n werklike komponent en nog 'n toegangsgrens by; om poort 8080 na 1080 te verander, verskaf nie die vertaling nie.
Hou seleksie en oorname sigbaar
Teken beide die selekteerder se resultaat en die verbinding wat die kliënt werklik oopmaak, aan. Die eerste beskryf beleidsuitsette; die tweede bepaal of die implementering dit aangeneem het.
Bind gevolgtrekkings aan die looptyd en transport wat gebruik word. JVM-SOCKS-eienskappe wat deur een socket-implementering gebruik word, is nie 'n belofte dat elke HTTP-biblioteek hulle raadpleeg nie. Wanneer die roete verpligtend is, moet 'n onondersteunde proksitipe opgespoor word voordat 'n oënskynlik suksesvolle direkte versoek aanvaar word.