Lỗi proxy HttpClient 4: giao thức http không được hỗ trợ
Giữ factory HTTP thường trong một sổ đăng ký Apache HttpClient 4 tùy chỉnh khi tuyến HTTPS kết nối tới proxy HTTP trước tiên.
Trong ứng dụng Apache HttpClient 4, đích HTTPS không có nghĩa là mọi kết nối đều bắt đầu bằng TLS. Proxy HTTP thông thường được tiếp cận qua một kết nối không mã hóa trước khi CONNECT mở đường hầm và TLS được chồng lên về phía đích.
Nếu trình quản lý kết nối tùy chỉnh chỉ đăng ký https, bước nhảy qua proxy đầu tiên có thể thất bại với UnsupportedSchemeException: http protocol is not supported.
Với API 4.5, hãy bao gồm cả hai factory khi dựng trình quản lý đó:
var registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", tlsFactory)
.build();
var manager = new PoolingHttpClientConnectionManager(registry);
var client = HttpClients.custom()
.setConnectionManager(manager)
.setProxy(new HttpHost("proxy.example.net", 8080, "http"))
.build();
tlsFactory là SSLConnectionSocketFactory hiện có của ứng dụng, với việc kiểm tra tin cậy và tên máy chủ như dự định. Các kiểu hiển thị thuộc các gói org.apache.http của Apache 4. Đoạn này giả định Java suy luận được kiểu biến cục bộ; mã Java cũ hơn có thể dùng kiểu tường minh.
Gắn trình quản lý đã sửa vào máy khách thực sự được dùng cho yêu cầu. Với một yêu cầu HTTPS công khai được phép mà không có xác thực proxy, một mục HTTP từ danh sách proxy HTTP có thể điền địa chỉ proxy của HttpHost. Cấu hình một builder khác không cập nhật máy khách đã được tạo.
Cũng hãy kiểm tra quyền sở hữu của builder: HttpClientBuilder ghi rõ rằng trình quản lý kết nối được cung cấp tường minh có thể ghi đè các đầu vào cấu hình SSL riêng của nó. Đặt các factory cần thiết vào sổ đăng ký của trình quản lý thay vì cho rằng lệnh gọi setSSLContext sau này sẽ thay thế phần bên trong của nó.
Chẩn đoán này liên quan đến sổ đăng ký lược đồ cục bộ. Thử thách xác thực proxy hoặc đích bị từ chối là kết quả muộn hơn và khác. Giữ cả hai đăng ký factory trong khi điều tra các phản hồi đó.