Permintaan Java dapat menemui beberapa masukan proksi: konfigurasi klien eksplisit, selektor bawaan, properti jaringan JVM, dan setelan sistem operasi yang didukung. Saat log menyebut SOCKS secara tak terduga, kenali masukan mana yang memilihnya.

Untuk kode yang menggunakan selektor bawaan, periksa keputusan untuk tujuan yang tepat:

URI target = URI.create("https://example.com/");
ProxySelector selector = ProxySelector.getDefault();
if (selector != null) {
    System.out.println(selector.select(target));
}

Ini melaporkan kandidat selektor. Ini tidak membuktikan koneksi mana yang akhirnya berhasil, dan klien dengan rute eksplisitnya sendiri dapat membuat pilihan berbeda.

Periksa setelan yang efektif

Tinjau http.proxyHost, https.proxyHost, socksProxyHost, portnya, dan java.net.useSystemProxies. Dokumentasi properti jaringan JDK menjelaskan cakupan dan prioritasnya. Penemuan proksi sistem diperiksa saat mulai; setel dengan sengaja saat menjalankan JVM.

Jawaban historis menjelaskan kombinasi tertentu dari dialog Windows lama dan JDK lama. Laporan itu dapat menjelaskan asal sebuah solusi, tetapi tidak membuktikan bahwa runtime saat ini memiliki bug yang sama. Catat versi runtime dan keluaran selektor sebelum mengubah setelan sistem operasi untuk setiap aplikasi.

Jika aplikasi memerlukan proksi HTTP untuk satu klien, konfigurasi proksi eksplisit dapat memperjelas kebutuhan itu. Jika aplikasi memerlukan perutean otomatis terpusat, selidiki mengapa selektor menerima atau mengembalikan entri SOCKS yang tak terduga.

Selektor khusus harus mempertahankan pengecualian yang disengaja dan penanganan kegagalan. Memfilter setiap kandidat SOCKS tanpa pandang bulu dapat memutus koneksi yang seharusnya menggunakan salah satunya. Perbaiki aturan yang salah dengan cakupan terkecil yang dapat Anda kenali.

Artikel terkait