Mini Java Socket HTTP CONNECT f'OpenJDK 25
Uża l-mogħdija tas-socket permezz tal-proxy HTTP f'OpenJDK 25 biex tasal għal servizz TCP permess, filwaqt li żżomm il-punt tat-tmiem tal-proxy u d-destinazzjoni separati.
Protokoll TCP personalizzat jista' jivvjaġġa permezz ta' proxy HTTP meta dak il-proxy jippermetti CONNECT lejn id-destinazzjoni. Il-protokoll tal-applikazzjoni m'għandux għalfejn isir HTTP: HTTP jistabbilixxi l-mina, imbagħad l-applikazzjoni tibdel il-bytes tagħha stess ġewwa fiha.
OpenJDK 25 jipprovdi mogħdija permezz ta' proxy HTTP f'Socket(Proxy). L-implimentazzjoni tiegħu twettaq l-iskambju CONNECT u tirritorna socket konness biex l-applikazzjoni tużah.
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();
}Dan il-framment juża klassijiet minn java.net u java.io. Ibdel iż-żewġ punti tat-tmiem u wettaq l-iskambju tal-protokoll qabel ma toħroġ mill-blokka try. Għal mira TCP pubblika permessa, agħżel kandidati HTTP mil-lista tal-proxy HTTP biss wara li tkun iċċekkjajt il-permess CONNECT għall-port ta' dik il-mira. L-indirizz tal-proxy huwa fejn Java jikkonnettja l-ewwel; l-indirizz li jgħaddi lil connect jidentifika s-servizz li l-proxy għandu jilħaq.
Id-destinazzjoni mhux solvuta żżomm l-isem tal-host tagħha għat-talba CONNECT ta' din l-implimentazzjoni. Minflok, InetSocketAddress solvuta tforni l-indirizz IP solvut tagħha lil dik it-talba. Dan id-distinzjoni hija importanti meta l-proxy għandu jsolvi l-isem tas-servizz jew japplika politika bbażata fuq l-isem tal-host.
X'jħallilek konnessjoni b'suċċess
Il-flussi li jirriżultaw iġorru d-dejta tas-servizz fil-mina. Ma jurux risposta HTTP separata li l-applikazzjoni tiegħek għandha taqra u tarmi. Żieda tat-tieni skambju CONNECT tibgħat test HTTP lis-servizz wara li l-JDK ikun diġà stabbilixxa l-mina.
L-eżempju jistabbilixxi timeout tal-konnessjoni u timeout tal-qari tas-socket; dawk huma kontrolli separati, mhux skadenza waħda globali għas-sessjoni tal-applikazzjoni.
Il-permess CONNECT għadu tal-proxy. Punt tat-tmiem li jgħaddi talbiet web ordinarji jista' jirrifjuta l-port tas-servizz jew jitlob awtentikazzjoni qabel ma jiftaħ mina. Żomm dawk il-fallimenti separati minn server li jaċċetta l-mina iżda wara jirrifjuta l-protokoll tal-applikazzjoni tiegħek.
Jekk dak il-protokoll jeħtieġ TLS, innegozja TLS permezz tas-socket konness bl-isem tal-host maħsub tas-servizz u l-verifiki tas-sertifikat tas-soltu. CONNECT waħdu ma jinkriptax il-fluss. Għal HTTP API reali, klijent HTTP jibqa' l-interface l-aktar konvenjenti għax jimmaniġġja wkoll il-messaġġi HTTP.