JDK 25 HttpClient Tidak Menggunakan Laluan SOCKS ProxySelector
Pilih pengangkutan HTTP Java yang benar-benar menyokong SOCKS daripada hanya bergantung pada jenis yang dikembalikan oleh ProxySelector.
Objek proksi Java menerangkan satu laluan. Klien rangkaian masih menentukan jenis laluan yang boleh digunakannya. Ini penting apabila titik akhir yang tersedia bercakap SOCKS dan aplikasi menggunakan java.net.http.HttpClient.
Dalam pelaksanaan JDK 25 yang diperiksa di sini, kod permintaan klien HTTP menerima calon HTTP daripada pemilih. Calon SOCKS tidak menyebabkannya melakukan rundingan SOCKS; pelaksanaan boleh meneruskan tanpa proksi. Oleh itu respons yang berjaya bukan bukti yang cukup bahawa entri SOCKS pemilih tersuai telah digunakan.
Pilih pengangkutan dahulu
Untuk aplikasi sedia ada berasaskan URLConnection, pengendali protokol boleh diberi proksi eksplisit yang disokong semasa membuka sambungan:
Proxy route = new Proxy(Proxy.Type.SOCKS,
new InetSocketAddress("proxy.example", 1080));
URLConnection connection = URI.create("https://service.example/")
.toURL().openConnection(route);
connection.setConnectTimeout(5000);
connection.setReadTimeout(15000);
Untuk ujian sasaran awam yang dibenarkan, gunakan titik akhir SOCKS yang sepadan daripada perkhidmatan anda atau daripada senarai proksi SOCKS. Ini API klien yang berbeza, bukan ejaan alternatif bagi HttpClient.Builder.proxy. Kekalkan URL destinasi supaya HTTPS terus mengenal pasti laman web yang dimaksudkan.
Aplikasi yang mesti mengekalkan java.net.http boleh menggunakan titik akhir proksi HTTP yang serasi, termasuk penyesuai yang diluluskan yang mengendalikan sambungan SOCKS seterusnya. Itu menambah komponen sebenar dan satu lagi sempadan akses; menukar port 8080 kepada 1080 tidak menyediakan terjemahan itu.
Kekalkan pemilihan dan penerimaan kelihatan
Rekodkan hasil pemilih dan sambungan yang benar-benar dibuka oleh klien. Yang pertama menerangkan output dasar; yang kedua menentukan sama ada pelaksanaan menerimanya.
Ikat kesimpulan pada masa jalan dan pengangkutan yang digunakan. Sifat SOCKS JVM yang digunakan oleh satu pelaksanaan soket bukan janji bahawa setiap pustaka HTTP merujuknya. Apabila laluan wajib, jenis proksi yang tidak disokong harus dikesan sebelum menerima permintaan langsung yang kelihatan berjaya.