Өзгөчө TCP протоколу прокси бара турган жерге CONNECT уруксат бергенде HTTP прокси аркылуу өтө алат. Колдонмо протоколу HTTP болушу шарт эмес: HTTP туннелди орнотот, андан кийин колдонмо өз байттарын анын ичинде алмашат.

OpenJDK 25 Socket(Proxy) ичинде HTTP прокси жолун сунуштайт. Анын ишке ашырылышы CONNECT алмашуусун аткарат жана колдонмо колдонушу үчүн туташкан socket кайтарат.

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 алмашуусун кошуу JDK туннелди мурун эле орноткондон кийин кызматка HTTP текстин жиберер эле.

Мисал туташуу убакыт чегин жана socket окуу убакыт чегин берет; алар өзүнчө башкаруу каражаттары, колдонмо сессиясы үчүн бир жалпы мөөнөт эмес.

CONNECT уруксаты дагы эле проксиге таандык. Кадимки веб суроолорду өткөрүүчү акыркы чекит кызматтын портун четке кагышы же туннел ачканга чейин аутентификация талап кылышы мүмкүн. Бул ийгиликсиздиктерди туннелди кабыл алып, кийин колдонмо протоколуңузду четке каккан серверден өзүнчө кармаңыз.

Эгер бул протоколго TLS керек болсо, туташкан socket аркылуу кызматтын көздөлгөн хост аты жана кадимки сертификат текшерүүлөрү менен TLS сүйлөшүңүз. CONNECT жалгыз өзү агымды шифрлабайт. Чыныгы HTTP API үчүн HTTP кардары HTTP билдирүүлөрүн да иштеткендиктен ыңгайлуураак интерфейс бойдон калат.

Тектеш макалалар