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.

Artikli relatati