HttpClient 4 proxy xətası: http protokolu dəstəklənmir
HTTPS marşrutu ilk dəfə HTTP proxy-yə qoşulduqda adi HTTP fabrikini fərdi Apache HttpClient 4 reyestrində saxlayın.
Apache HttpClient 4 tətbiqində HTTPS təyinatı hər bağlantının TLS ilə başladığı demək deyil. Adi HTTP proxy-yə şifrələnməmiş bağlantı ilə çatılır, sonra CONNECT tuneli açır və TLS təyinat istiqamətində qatlanır.
Fərdi bağlantı meneceri yalnız https qeydiyyata alırsa, ilk proxy addımı UnsupportedSchemeException: http protocol is not supported ilə uğursuz ola bilər.
4.5 API üçün həmin meneceri qurarkən hər iki fabriki daxil edin:
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 tətbiqin mövcud SSLConnectionSocketFactory-sidir və nəzərdə tutulan etimad və host adı yoxlamasını daşıyır. Göstərilən tiplər Apache 4-ün org.apache.http paketlərinə aiddir. Parça Java-nın lokal dəyişən növ çıxarımını fərz edir; köhnə Java kodu açıq tiplərdən istifadə edə bilər.
Düzəldilmiş meneceri sorğuda həqiqətən istifadə olunan klientə bağlayın. Proxy autentifikasiyası olmadan icazə verilən ictimai HTTPS sorğusu üçün HTTP proxy siyahısından bir HTTP qeydi HttpHost-un proxy ünvanını doldura bilər. Başqa builder qurmaq artıq yaradılmış klienti yeniləmir.
Builder sahibliyini də yoxlayın: HttpClientBuilder sənədləşdirir ki, açıq şəkildə verilən bağlantı meneceri onun ayrı SSL konfiqurasiya girişlərini üstələyə bilər. Tələb olunan fabrikləri menecerin reyestrinə qoyun, sonrakı setSSLContext çağırışının onun daxilini əvəz edəcəyini güman etməyin.
Bu diaqnoz yerli sxem reyestrinə aiddir. Proxy autentifikasiya çağırışı və ya rədd edilmiş təyinat sonrakı, fərqli nəticədir. Bu cavabları araşdırarkən hər iki fabrik qeydini saxlayın.