Tuneli Java Socket HTTP CONNECT v OpenJDK 25
Uporabite pot soketa prek HTTP proxyja v OpenJDK 25, da dosežete dovoljeno storitev TCP, pri tem pa imejte končno točko proxyja in cilj ločena.
Protokol TCP po meri lahko potuje skozi HTTP proxy, ko ta proxy dovoljuje CONNECT do cilja. Protokolu aplikacije ni treba postati HTTP: HTTP vzpostavi tunel, nato aplikacija izmenjuje svoje lastne bajte znotraj njega.
OpenJDK 25 ponuja pot prek HTTP proxyja v Socket(Proxy). Njegova izvedba opravi izmenjavo CONNECT in vrne povezan socket, ki ga aplikacija uporabi.
Proxy route = new Proxy(
Proxy.Type.HTTP,
new InetSocketAddress("proxy.example", 8080));
try (Socket socket = new Socket(route)) {
socket.setSoTimeout(10000);
socket.connect(
InetSocketAddress.createUnresolved("tcp-service.example", 8443),
5000);
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();
}Ta odlomek uporablja razrede iz java.net in java.io. Zamenjajte obe končni točki in opravite izmenjavo protokola, preden zapustite blok try. Za dovoljeni javni cilj TCP izbirajte kandidate HTTP s seznama HTTP proxyjev šele potem, ko preverite dovoljenje CONNECT za vrata tega cilja. Naslov proxyja je mesto, kamor se Java poveže najprej; naslov, posredovan v connect, označuje storitev, do katere mora priti proxy.
Nerazrešeni cilj ohrani svoje ime gostitelja za zahtevo CONNECT te izvedbe. Razrešeni InetSocketAddress pa tej zahtevi namesto tega priskrbi svoj razrešeni IP naslov. Ta razlika je pomembna, ko mora proxy razrešiti ime storitve ali uporabiti pravilnik, ki temelji na imenu gostitelja.
Kaj vam uspešna povezava pusti
Nastali tokovi prenašajo podatke storitve v tunelu. Ne razkrijejo ločenega odgovora HTTP, ki bi ga vaša aplikacija morala prebrati in zavreči. Dodajanje druge izmenjave CONNECT bi poslalo besedilo HTTP storitvi potem, ko je JDK tunel že vzpostavil.
Primer nastavi časovno omejitev povezave in časovno omejitev branja iz socketa; to sta ločeni kontroli, ne en skupni rok za sejo aplikacije.
Dovoljenje CONNECT še vedno pripada proxyju. Končna točka, ki posreduje običajne spletne zahteve, lahko zavrne vrata storitve ali zahteva preverjanje pristnosti, preden odpre tunel. Te neuspehe ločite od strežnika, ki tunel sprejme, a pozneje zavrne protokol vaše aplikacije.
Če ta protokol potrebuje TLS, se o TLS dogovorite prek povezanega socketa z predvidenim imenom gostitelja storitve in običajnimi preverjanji potrdila. Sam CONNECT toka ne šifrira. Za pravi HTTP API ostaja odjemalec HTTP priročnejši vmesnik, ker obdeluje tudi sporočila HTTP.