Java Socket HTTP CONNECT tuneļi OpenJDK 25
Izmantojiet HTTP starpniekservera socket ceļu OpenJDK 25, lai sasniegtu atļautu TCP pakalpojumu, vienlaikus turot starpniekservera galapunktu un galamērķi atsevišķi.
Pielāgots TCP protokols var ceļot caur HTTP starpniekserveri, ja tas atļauj CONNECT uz galamērķi. Lietojumprogrammas protokolam nav jākļūst par HTTP: HTTP izveido tuneli, un pēc tam lietojumprogramma apmainās ar saviem baitiem tā iekšienē.
OpenJDK 25 piedāvā HTTP starpniekservera ceļu Socket(Proxy). Tā ieviešana veic CONNECT apmaiņu un atgriež savienotu socket, ko lietojumprogramma var izmantot.
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();
}Šis fragments izmanto klases no java.net un java.io. Aizstājiet abus galapunktus un veiciet protokola apmaiņu pirms try bloka atstāšanas. Atļautam publiskam TCP mērķim izvēlieties HTTP kandidātus no HTTP starpniekserveru saraksta tikai pēc tam, kad esat pārbaudījis CONNECT atļauju šī mērķa portam. Starpniekservera adrese ir vieta, kur Java pieslēdzas vispirms; connect nodotā adrese identificē pakalpojumu, kuram starpniekserverim jāsasniedz.
Neatrisinātais galamērķis saglabā savu resursdatora nosaukumu šīs ieviešanas CONNECT pieprasījumam. Savukārt atrisināts InetSocketAddress šim pieprasījumam piegādā savu atrisināto IP adresi. Šī atšķirība ir svarīga, kad starpniekserverim jāatrisina pakalpojuma nosaukums vai jāpiemēro resursdatora nosaukumā balstīta politika.
Ko jums atstāj veiksmīgs savienojums
Iegūtās plūsmas pārnēsā tuneļotā pakalpojuma datus. Tās neatklāj atsevišķu HTTP atbildi, ko jūsu lietojumprogrammai vajadzētu nolasīt un izmest. Otras CONNECT apmaiņas pievienošana nosūtītu HTTP tekstu pakalpojumam pēc tam, kad JDK jau ir izveidojis tuneli.
Piemērs nosaka savienojuma taimautu un socket lasīšanas taimautu; tie ir atsevišķi vadības līdzekļi, nevis viens kopīgs termiņš lietojumprogrammas sesijai.
CONNECT atļauja joprojām pieder starpniekserverim. Galapunkts, kas pārsūta parastus tīmekļa pieprasījumus, var noraidīt pakalpojuma portu vai pieprasīt autentifikāciju pirms tuneļa atvēršanas. Turiet šīs kļūdas atsevišķi no servera, kas pieņem tuneli, bet vēlāk noraida jūsu lietojumprogrammas protokolu.
Ja šim protokolam nepieciešams TLS, vienojieties par TLS caur savienoto socket ar pakalpojuma paredzēto resursdatora nosaukumu un parastajām sertifikātu pārbaudēm. CONNECT vien nešifrē plūsmu. Īstam HTTP API HTTP klients joprojām ir ērtākā saskarne, jo tas apstrādā arī HTTP ziņojumus.