Mengapa Java Memilih Proksi SOCKS untuk Permintaan HTTP Anda
Periksa hasil ProxySelector dan tetapan JVM berkesan sebelum menggunakan penyelesaian proksi Windows lama.
Permintaan Java boleh menemui beberapa input proksi: konfigurasi klien eksplisit, pemilih lalai, sifat rangkaian JVM dan tetapan sistem pengendalian yang disokong. Apabila log menyebut SOCKS secara tidak dijangka, kenal pasti input mana yang memilihnya.
Untuk kod yang menggunakan pemilih lalai, periksa keputusan untuk destinasi tepat:
URI target = URI.create("https://example.com/");
ProxySelector selector = ProxySelector.getDefault();
if (selector != null) {
System.out.println(selector.select(target));
}
Ini melaporkan calon pemilih. Ia tidak membuktikan sambungan mana yang akhirnya berjaya, dan klien dengan laluan eksplisitnya sendiri boleh membuat pilihan berbeza.
Periksa tetapan berkesan
Semak http.proxyHost, https.proxyHost, socksProxyHost, port mereka dan java.net.useSystemProxies. Dokumentasi sifat rangkaian JDK menerangkan skop dan keutamaan mereka. Penemuan proksi sistem diperiksa semasa permulaan; tetapkannya secara sengaja apabila memulakan JVM.
Jawapan sejarah menerangkan gabungan khusus dialog Windows lama dan JDK lama. Laporan itu boleh menjelaskan asal usul penyelesaian, tetapi tidak membuktikan bahawa runtime semasa mempunyai pepijat yang sama. Rekod versi runtime dan output pemilih sebelum menukar tetapan sistem pengendalian untuk setiap aplikasi.
Jika aplikasi memerlukan proksi HTTP untuk satu klien, konfigurasi proksi eksplisit boleh menjadikan keperluan itu lebih jelas. Jika ia memerlukan penghalaan automatik berpusat, siasat mengapa pemilih menerima atau memulangkan entri SOCKS yang tidak dijangka.
Pemilih tersuai harus mengekalkan pintasan yang disengajakan dan pengendalian kegagalan. Menapis setiap calon SOCKS tanpa diskriminasi boleh memutuskan sambungan yang sepatutnya menggunakan satu. Betulkan peraturan yang salah dengan skop terkecil yang dapat anda kenal pasti.