Một yêu cầu Java có thể gặp nhiều nguồn proxy: cấu hình máy khách rõ ràng, bộ chọn mặc định, thuộc tính mạng của JVM và các thiết lập hệ điều hành được hỗ trợ. Khi nhật ký bất ngờ nhắc đến SOCKS, hãy xác định nguồn nào đã chọn nó.

Với mã dùng bộ chọn mặc định, hãy kiểm tra quyết định cho đích chính xác:

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

Lệnh này báo cáo các ứng viên của bộ chọn. Nó không chứng minh kết nối nào cuối cùng đã thành công, và một máy khách có tuyến rõ ràng riêng có thể chọn khác.

Kiểm tra các thiết lập hiệu lực

Xem lại http.proxyHost, https.proxyHost, socksProxyHost, cổng của chúng và java.net.useSystemProxies. tài liệu thuộc tính mạng của JDK mô tả phạm vi và thứ tự ưu tiên của chúng. Việc phát hiện proxy hệ thống được kiểm tra lúc khởi động; hãy đặt nó một cách có chủ đích khi khởi động JVM.

Các câu trả lời lịch sử mô tả những kết hợp cụ thể của hộp thoại Windows cũ và JDK cũ. Những báo cáo đó có thể giải thích nguồn gốc của một cách xử lý, nhưng không chứng minh rằng môi trường chạy hiện tại có cùng lỗi. Ghi lại phiên bản môi trường chạy và đầu ra của bộ chọn trước khi thay đổi thiết lập hệ điều hành cho mọi ứng dụng.

Nếu ứng dụng cần proxy HTTP cho một máy khách, cấu hình proxy rõ ràng có thể làm rõ yêu cầu đó. Nếu cần định tuyến tự động tập trung, hãy điều tra vì sao bộ chọn nhận hoặc trả về mục SOCKS bất ngờ.

Bộ chọn tùy chỉnh nên giữ lại các lần bỏ qua có chủ đích và cách xử lý lỗi. Lọc mọi ứng viên SOCKS một cách không phân biệt có thể làm hỏng các kết nối lẽ ra phải dùng một ứng viên. Sửa quy tắc sai với phạm vi nhỏ nhất bạn có thể xác định.

Bài viết liên quan