Java Socket HTTP CONNECT тунели у OpenJDK 25
Користите путању сокета кроз HTTP прокси у OpenJDK 25 да достигнете дозвољену TCP услугу, држећи крајњу тачку проксија и одредиште одвојено.
Прилагођени TCP протокол може путовати кроз HTTP прокси када тај прокси дозвољава CONNECT ка одредишту. Протокол апликације не мора постати HTTP: HTTP успоставља тунел, а затим апликација размењује сопствене бајтове унутар њега.
OpenJDK 25 пружа путању кроз HTTP прокси у Socket(Proxy). Његова имплементација изводи CONNECT размену и враћа повезан сокет за употребу апликацији.
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();
}Овај фрагмент користи класе из java.net и java.io. Замените две крајње тачке и обавите размену протокола пре изласка из try блока. За дозвољену јавну TCP мету бирајте HTTP кандидате са листе HTTP проксија тек након што проверите дозволу за CONNECT на порту те мете. Адреса проксија је место на које се Java прво повезује; адреса прослеђена у connect означава услугу до које прокси треба да стигне.
Неразрешено одредиште задржава име хоста за CONNECT захтев ове имплементације. Разрешени InetSocketAddress уместо тога том захтеву доставља своју разрешену IP адресу. Та разлика је важна када прокси мора да разреши име услуге или примени правило засновано на имену хоста.
Шта вам успешна веза оставља
Добијени токови носе податке тунелиране услуге. Они не излажу засебан HTTP одговор који би ваша апликација требало да прочита и одбаци. Додавање друге CONNECT размене послало би HTTP текст услузи након што је JDK већ успоставио тунел.
Пример поставља временско ограничење повезивања и временско ограничење читања са сокета; то су одвојене контроле, а не један заједнички рок за сесију апликације.
Дозвола за CONNECT и даље припада проксију. Крајња тачка која прослеђује обичне веб захтеве може одбити порт услуге или захтевати аутентификацију пре отварања тунела. Држите те неуспехе одвојено од сервера који прихвата тунел али касније одбија протокол ваше апликације.
Ако том протоколу треба TLS, преговарајте TLS кроз повезани сокет са предвиђеним именом хоста услуге и уобичајеним проверама сертификата. Сам CONNECT не шифрује ток. За стварни HTTP API, HTTP клијент остаје прикладнији интерфејс јер обрађује и HTTP поруке.