Java Socket HTTP CONNECT-tunnelar i OpenJDK 25
Bruk HTTP-proxy-socketvegen i OpenJDK 25 for å nå ei tillaten TCP-teneste, medan proxy-endepunktet og målet blir haldne fråskilde.
Ein tilpassa TCP-protokoll kan reise gjennom ein HTTP-proxy når proxyen tillèt CONNECT til målet. Applikasjonsprotokollen treng ikkje bli HTTP: HTTP etablerer tunnelen, og deretter byter applikasjonen sine eigne byte inne i han.
OpenJDK 25 tilbyr ein HTTP-proxyveg i Socket(Proxy). Implementasjonen utfører CONNECT-utvekslinga og returnerer ein tilkopla socket som applikasjonen kan bruke.
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();
}Dette utdraget brukar klassar frå java.net og java.io. Byt ut dei to endepunkta og utfør protokollutvekslinga før du forlèt try-blokka. For eit tillate offentleg TCP-mål vel du HTTP-kandidatar frå HTTP-proxylista først etter å ha kontrollert CONNECT-tillatinga for porten til målet. Proxyadressa er staden Java koplar til først; adressa som blir send til connect, identifiserer tenesta proxyen skal nå.
Den uoppløyste destinasjonen held på vertsnamnet sitt for CONNECT-førespurnaden i denne implementasjonen. Ein oppløyst InetSocketAddress leverer i staden sin oppløyste IP-adresse til den førespurnaden. Den skilnaden er viktig når proxyen må løysa opp tenestenamnet eller bruke ein vertsnamnbasert policy.
Kva ei vellukka tilkopling lèt deg sitje att med
Straumane som oppstår, ber dataa til den tunnelbaserte tenesta. Dei avdekkjer ikkje eit eige HTTP-svar som applikasjonen din skal lese og kaste. Å leggje til ei ny CONNECT-utveksling ville sendt HTTP-tekst til tenesta etter at JDK alt har etablert tunnelen.
Dømet set ei tidsgrense for tilkopling og ei tidsgrense for socketlesing; det er separate kontrollar, ikkje ein samla frist for applikasjonsøkta.
CONNECT-tillatinga høyrer framleis til proxyen. Eit endepunkt som videresender vanlege nettførespurnader, kan avvise porten til tenesta eller krevje autentisering før ein tunnel blir opna. Hald dei feila fråskilde frå ein tenar som godtek tunnelen men seinare avviser applikasjonsprotokollen din.
Viss den protokollen treng TLS, forhandle TLS gjennom den tilkopla socketen med det tiltenkte vertsnamnet til tenesta og vanlege sertifikatkontrollar. CONNECT åleine krypterer ikkje straumen. For eit ekte HTTP-API er ein HTTP-klient framleis det meir praktiske grensesnittet fordi det òg handterer HTTP-meldingar.