Tunele Java Socket HTTP CONNECT në OpenJDK 25
Përdorni rrugën e socket-it përmes proxy HTTP në OpenJDK 25 për të arritur një shërbim TCP të lejuar, duke mbajtur të ndara pikën fundore të proxy-t dhe destinacionin.
Një protokoll TCP i personalizuar mund të udhëtojë përmes një proxy HTTP kur ai proxy lejon CONNECT drejt destinacionit. Protokolli i aplikacionit nuk duhet të bëhet HTTP: HTTP vendos tunelin, pastaj aplikacioni shkëmben bajtët e vet brenda tij.
OpenJDK 25 ofron një rrugë përmes proxy HTTP në Socket(Proxy). Zbatimi i tij kryen shkëmbimin CONNECT dhe kthen një socket të lidhur që aplikacioni ta përdorë.
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();
}Ky fragment përdor klasa nga java.net dhe java.io. Zëvendësoni dy pikat fundore dhe kryeni shkëmbimin e protokollit përpara se të dilni nga blloku try. Për një objektiv TCP publik të lejuar, zgjidhni kandidatë HTTP nga lista e proxy-ve HTTP vetëm pasi të keni kontrolluar lejen CONNECT për portën e atij objektivi. Adresa e proxy-t është vendi ku Java lidhet së pari; adresa e kaluar në connect identifikon shërbimin që proxy duhet të arrijë.
Destinacioni i pazgjidhur ruan emrin e tij të hostit për kërkesën CONNECT të këtij zbatimi. Një InetSocketAddress i zgjidhur, në vend të kësaj, i jep asaj kërkese adresën IP të zgjidhur. Ky dallim ka rëndësi kur proxy duhet të zgjidhë emrin e shërbimit ose të zbatojë një politikë të bazuar në emrin e hostit.
Çfarë ju lë një lidhje e suksesshme
Rrjedhat që rezultojnë mbartin të dhënat e shërbimit të tunelizuar. Ato nuk ekspozojnë një përgjigje të veçantë HTTP që aplikacioni juaj duhet të lexojë dhe të hedhë. Shtimi i një shkëmbimi të dytë CONNECT do të dërgonte tekst HTTP te shërbimi pasi JDK ka vendosur tashmë tunelin.
Shembulli vendos një afat lidhjeje dhe një afat leximi të socket-it; ato janë kontrolle të veçanta, jo një afat i vetëm i përgjithshëm për sesionin e aplikacionit.
Leja CONNECT ende i përket proxy-t. Një pikë fundore që përcjell kërkesa të zakonshme web mund të refuzojë portën e shërbimit ose të kërkojë vërtetim përpara se të hapë një tunel. Mbajini ato dështime të ndara nga një server që pranon tunelin por më vonë refuzon protokollin e aplikacionit tuaj.
Nëse ai protokoll kërkon TLS, negocioni TLS përmes socket-it të lidhur me emrin e synuar të hostit të shërbimit dhe kontrollet e zakonshme të certifikatës. Vetëm CONNECT nuk e kripton rrjedhën. Për një HTTP API të vërtetë, një klient HTTP mbetet ndërfaqja më e përshtatshme sepse trajton edhe mesazhet HTTP.