Sérsniðið TCP-samskiptareglur geta ferðast í gegnum HTTP-proxy þegar sá proxy leyfir CONNECT að áfangastaðnum. Forritasamskiptareglurnar þurfa ekki að verða HTTP: HTTP byggir göngin og síðan skiptir forritið út eigin bætum inni í þeim.

OpenJDK 25 bíður upp á HTTP-proxy slóð í Socket(Proxy). Útfærslan framkvæmir CONNECT-skiptin og skilar tengdum socket fyrir forritið að nota.

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();
}

Þetta brot notar klasa úr java.net og java.io. Skiptu út endapunktunum tveimur og framkvæmdu samskiptaregluskiptin áður en þú ferð út úr try-blokkinni. Fyrir leyfðan opinberan TCP-áfangastað skaltu velja HTTP-frambjóðendur úr HTTP-proxy listanum aðeins eftir að hafa athugað CONNECT-leyfið fyrir port áfangastaðarins. Proxy-slóðin er þar sem Java tengist fyrst; slóðin sem er send til connect auðkennir þá þjónustu sem proxyið á að ná.

Óleysti áfangastaðurinn heldur hýsilnafni sínu fyrir CONNECT-beiðnina í þessari útfærslu. Leyst InetSocketAddress gefur þeirri beiðni hins vegar leystu IP-slóðina sína. Sá munur skiptir máli þegar proxyið þarf að leysa þjónustunafnið eða beita stefnu sem byggir á hýsilnafni.

Hvað farsæl tenging skilur eftir sig

Streymirnir sem verða til bera gögn gönguþjónustunnar. Þeir afhjúpa ekki sérstakt HTTP-svar sem forritið þitt ætti að lesa og henda. Að bæta við annarri CONNECT-skiptingu myndi senda HTTP-texta til þjónustunnar eftir að JDK hefur þegar byggt göngin.

Dæmið setur tengitímannörk og lestrartímannörk fyrir socketið; þetta eru aðskildar stýringar, ekki ein heildarfrestur fyrir lotu forritsins.

CONNECT-leyfið tilheyrir enn proxyinu. Endapunktur sem sendir venjulegar vefbeiðnir áfram getur hafnað porti þjónustunnar eða krafist auðkenningar áður en göng eru opnuð. Haltu þessum mistökum aðskildum frá þjóni sem tekur við göngunum en hafnar síðar forritasamskiptareglunum þínum.

Ef þessar samskiptareglur þurfa TLS skaltu semja um TLS í gegnum tengda socketið með fyrirhuguðu hýsilnafni þjónustunnar og venjulegum vottorðsathugunum. CONNECT eitt og sér dulkóðar ekki streyminn. Fyrir raunverulegt HTTP API er HTTP-klient enn þægilegasta viðmótið því það meðhöndlar einnig HTTP-skilaboð.

Tengdir greinar