Өөрийн 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 зорилтын хувьд тухайн зорилтын портын CONNECT зөвшөөрлийг шалгасны дараа л HTTP прокси жагсаалтаас HTTP нэр дэвшигчдийг сонгоорой. Прокси хаяг нь Java хамгийн түрүүнд холбогдох газар; connect-д өгөх хаяг нь прокси хүрэх ёстой үйлчилгээг тодорхойлно.

Шийдэгдээгүй очих газар нь энэ хэрэгжилтийн CONNECT хүсэлтэд зориулж хост нэрээ хадгалдаг. Харин шийдэгдсэн InetSocketAddress тэр хүсэлтэд шийдэгдсэн IP хаягаа өгдөг. Прокси үйлчилгээний нэрийг шийдэх эсвэл хост нэрэд суурилсан бодлого хэрэглэх шаардлагатай үед энэ ялгаа чухал.

Амжилттай холболт юу үлдээдэг вэ

Үүссэн урсгалууд туннельдсан үйлчилгээний өгөгдлийг зөөдөг. Тэд таны програм уншиж хаях ёстой тусдаа HTTP хариуг харуулдаггүй. Хоёр дахь CONNECT солилцоог нэмбэл JDK туннелийг аль хэдийн бий болгосны дараа үйлчилгээнд HTTP текст илгээх байсан.

Жишээ нь холболтын хугацааны хязгаар болон socket унших хугацааны хязгаарыг тогтоодог; эдгээр нь тусдаа удирдлага бөгөөд програмын сессэд ногдох нэг нийт хугацаа биш.

CONNECT зөвшөөрөл нь проксид хамаарах хэвээр. Энгийн вэб хүсэлт дамжуулдаг төгсгөлийн цэг нь үйлчилгээний портыг татгалзах эсвэл туннель нээхийн өмнө баталгаажуулалт шаардаж болно. Эдгээр алдааг туннелийг хүлээн авч дараа нь таны програмын протоколыг татгалздаг серверээс тусдаа байлгаарай.

Хэрэв тэр протоколд TLS хэрэгтэй бол холбогдсон socket-оор дамжуулан үйлчилгээний зорьсон хост нэр болон ердийн гэрчилгээний шалгалттайгаар TLS хэлэлцээр хийгээрэй. CONNECT дангаараа урсгалыг шифрлэдэггүй. Жинхэнэ HTTP API-д HTTP клиент нь HTTP мессежийг ч боловсруулдаг тул илүү тохиромжтой интерфейс хэвээр байна.

Холбоотой нийтлэлүүд