SOCKS so'nggi nuqtasi sizni saytga olib boradi. O'sha ulanish ichidagi TLS hamkori saytning o'zi, shuning uchun manzil xost nomini qatlamli socket fabrikasiga bering:

String destination = "example.com";
int destinationPort = 443;
Proxy proxy = new Proxy(
    Proxy.Type.SOCKS,
    new InetSocketAddress("127.0.0.1", 1080)
);

try (Socket transport = new Socket(proxy)) {
    transport.connect(
        InetSocketAddress.createUnresolved(destination, destinationPort),
        5000
    );
    SSLSocketFactory factory =
        (SSLSocketFactory) SSLSocketFactory.getDefault();
    try (SSLSocket tls = (SSLSocket) factory.createSocket(
            transport, destination, destinationPort, true)) {
        SSLParameters parameters = tls.getSSLParameters();
        parameters.setEndpointIdentificationAlgorithm("HTTPS");
        tls.setSSLParameters(parameters);
        tls.setSoTimeout(15000);
        tls.startHandshake();
        // Send the application's HTTPS request through tls.
    }
}

Bu parcha standart Java tarmoq va TLS importlarini, mavjud standart ishonch konfiguratsiyasini va proksi hisob ma'lumotlarini talab qilmaydigan SOCKS ulanishini nazarda tutadi. U qo'l siqishni bajaradi; dastur baribir server kutgan formatda HTTP so'rovini yuborishi kerak. Ruxsat etilgan ommaviy yo'nalishlardagi ommaviy HTTPS maqsadlari uchun SOCKS proksi ro'yxati nomzod so'nggi nuqtalarni taklif qiladi; server versiyasi va xost nomi qo'llab-quvvatlashini ushbu Java socket yo'nalishiga moslashtiring.

Misoldagi ikkita identifikatorni o'qing

127.0.0.1:1080 proksi so'nggi nuqtasi bo'lib, ushbu Java jarayonidan yetib borish mumkin. destination va destinationPort saytni aniqlaydi. createUnresolved o'sha xost nomini mijoza oldindan hal qilish o'rniga SOCKS yo'nalishi uchun saqlaydi.

Qatlamli createSocket manzil identifikatorini qabul qiladi. setEndpointIdentificationAlgorithm("HTTPS") uning xost nomi tekshiruvlarini aniq talab qiladi. Xom SSLSocket sertifikat zanjiri ishonchi xost nomi tekshiruvi yoqilganini o'z-o'zidan isbotlamaydi. Nomuvofiqlikni bosish uchun proksi nomini yoki loopback'ni almashtirish noto'g'ri so'nggi nuqtani autentifikatsiya qilishi mumkin.

Ishonch va tozalashni o'z bosqichlarida saqlang

Standart fabrika JVM ning sozlangan ishonch tartibidan foydalanadi. Xususiy talablari bo'lgan dastur buning o'rniga o'zining to'g'ri ishga tushirilgan SSLContext fabrikasidan foydalanishi mumkin. Bu tanlov SOCKS yo'nalishidan alohida; har bir sertifikatni qabul qiladigan ishonch menejeri noto'g'ri hamkor nomini tuzatmaydi.

SOCKS rad etilishi TLS dan oldin sodir bo'ladi; ishonchsiz sertifikat yoki noto'g'ri xost nomi TLS vaqtida muvaffaqiyatsizlikka uchraydi; keyin HTTP xatosi kelishi mumkin. Proksiga kirish tunnel so'rovini avtorizatsiya qiladi, ichidagi saytni autentifikatsiya qilmaydi.

Qatlamli socketni avtomatik yopish yoqilgan holda yopish uning transportini yopadi. Tashqi resurs doirasi ham odatdagi yakunlanishdan oldin o'rash yoki qo'l siqish muvaffaqiyatsiz bo'lsa, o'sha transportni yopadi.

O'xshash maqolalar