JDK 25 HttpClient nenaudoja ProxySelector SOCKS maršrutų
Pasirinkite Java HTTP transportą, kuris iš tikrųjų palaiko SOCKS, o ne pasikliaukite vien tipu, kurį grąžina ProxySelector.
Java proxy objektas aprašo maršrutą. Tinklo klientas vis tiek pats nusprendžia, kokio tipo maršrutus gali naudoti. Tai svarbu, kai pasiekiamas galinis taškas kalba SOCKS, o programa naudoja java.net.http.HttpClient.
Čia nagrinėjamoje JDK 25 implementacijoje HTTP kliento užklausos kodas priima HTTP kandidatą iš selektoriaus. SOCKS kandidatas nepriverčia jo atlikti SOCKS derybų; implementacija gali tęsti be proxy. Todėl sėkmingas atsakymas nėra pakankamas įrodymas, kad buvo panaudotas pasirinktinio selektoriaus SOCKS įrašas.
Pirmiausia pasirinkite transportą
Esamai programai, pagrįstai URLConnection, atidarant ryšį protokolo tvarkytuvui galima perduoti palaikomą aiškų proxy:
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);
Leidžiamiems viešų tikslų testams naudokite atitinkamą SOCKS galinį tašką iš savo paslaugos arba iš SOCKS proxy sąrašo. Tai kita kliento API, o ne alternatyvi HttpClient.Builder.proxy rašyba. Išsaugokite paskirties URL, kad HTTPS toliau atpažintų numatytą svetainę.
Programa, kuri turi išlaikyti java.net.http, gali vietoj to naudoti suderinamą HTTP proxy galinį tašką, įskaitant patvirtintą adapterį, kuris tvarko tolesnį SOCKS ryšį. Tai prideda tikrą komponentą ir dar vieną prieigos ribą; prievado 8080 pakeitimas į 1080 to vertimo nesuteikia.
Tegul pasirinkimas ir priėmimas būna matomi
Užregistruokite ir selektoriaus rezultatą, ir ryšį, kurį klientas iš tikrųjų atidaro. Pirmasis aprašo politikos išvestį; antrasis nustato, ar implementacija jį priėmė.
Siekite išvadas su naudojama vykdymo aplinka ir transportu. Vienos socket implementacijos naudojamos JVM SOCKS savybės nėra pažadas, kad kiekviena HTTP biblioteka jų klausia. Kai maršrutas privalomas, nepalaikomas proxy tipas turėtų būti aptiktas prieš priimant iš pažiūros sėkmingą tiesioginę užklausą.