คำขอ Java อาจพบอินพุตพร็อกซีหลายอย่าง: การกำหนดค่าคไลเอนต์อย่างชัดเจน ตัวเลือกเริ่มต้น คุณสมบัติเครือข่ายของ JVM และการตั้งค่าระบบปฏิบัติการที่รองรับ เมื่อบันทึกกล่าวถึง SOCKS อย่างไม่คาดคิด ให้ระบุว่าอินพุตใดเป็นผู้เลือก

สำหรับโค้ดที่ใช้ตัวเลือกเริ่มต้น ให้ตรวจสอบการตัดสินใจสำหรับปลายทางที่แน่นอน:

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

สิ่งนี้รายงานผู้สมัครของตัวเลือก ไม่ได้พิสูจน์ว่าการเชื่อมต่อใดสำเร็จในที่สุด และไคลเอนต์ที่มีเส้นทางชัดเจนของตนเองอาจเลือกต่างออกไป

ตรวจสอบการตั้งค่าที่มีผลจริง

ตรวจสอบ http.proxyHost, https.proxyHost, socksProxyHost, พอร์ตของค่าเหล่านี้ และ java.net.useSystemProxies. เอกสารคุณสมบัติเครือข่ายของ JDK อธิบายขอบเขตและลำดับความสำคัญ การค้นพบพร็อกซีของระบบจะถูกตรวจสอบเมื่อเริ่มต้น ให้ตั้งค่าอย่างตั้งใจเมื่อเริ่ม JVM

คำตอบในอดีตอธิบายการรวมกันเฉพาะของไดอะล็อก Windows เก่าและ JDK เก่า รายงานเหล่านั้นอธิบายที่มาของวิธีแก้ได้ แต่ไม่ได้ยืนยันว่ารันไทม์ปัจจุบันมีบั๊กเดียวกัน บันทึกเวอร์ชันรันไทม์และเอาต์พุตของตัวเลือกก่อนเปลี่ยนการตั้งค่าระบบปฏิบัติการสำหรับทุกแอปพลิเคชัน

หากแอปพลิเคชันต้องการพร็อกซี HTTP สำหรับไคลเอนต์หนึ่งตัว การกำหนดค่าพร็อกซีอย่างชัดเจน ทำให้ข้อกำหนดนั้นชัดเจนขึ้นได้ หากต้องการการกำหนดเส้นทางอัตโนมัติจากศูนย์กลาง ให้ตรวจสอบว่าทำไมตัวเลือกจึงได้รับหรือส่งคืนรายการ SOCKS ที่ไม่คาดคิด

ตัวเลือกที่กำหนดเองควรคงการข้ามตามเจตนาและการจัดการความล้มเหลว การกรองผู้สมัคร SOCKS ทุกรายอย่างไม่เลือกหน้าอาจทำให้การเชื่อมต่อที่ควรใช้รายการนั้นเสียหายได้ แก้ไขกฎที่ไม่ถูกต้องด้วยขอบเขตเล็กที่สุดที่คุณระบุได้

บทความที่เกี่ยวข้อง