Грешка проксија у HttpClient 4: http протокол није подржан
Задржите обичну HTTP фабрику у сопственом регистру Apache HttpClient 4 када се HTTPS рута прво повезује са HTTP проксијем.
У апликацији са Apache HttpClient 4 HTTPS одредиште не значи да свака веза почиње TLS-ом. До обичног HTTP проксија долази се преко нешифроване везе пре него CONNECT отвори тунел и TLS се слоји према одредишту.
Ако сопствени менаџер веза региструје само https, први скок кроз прокси може пасти са UnsupportedSchemeException: http protocol is not supported.
За 4.5 API укључите обе фабрике при изградњи тог менаџера:
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 је постојећи SSLConnectionSocketFactory апликације, са намераваном провером поверења и имена хоста. Приказани типови припадају пакетима org.apache.http Apache 4. Исечак претпоставља извођење типова локалних променљивих у Javi; старији Java код може користити експлицитне типове.
Причврстите исправљени менаџер на клијента који се стварно користи за захтев. За дозвољен јавни HTTPS захтев без аутентификације проксија, HTTP унос из списка HTTP проксија може попунити адресу проксија у HttpHost. Конфигурисање другог builder-а не ажурира већ изграђеног клијента.
Проверите и власништво builder-а: HttpClientBuilder документује да експлицитно достављен менаџер веза може надјачати његове одвојене SSL конфигурационе улазе. Ставите потребне фабрике у регистар менаџера уместо да претпоставите да ће каснији позив setSSLContext заменити његову унутрашњост.
Ова дијагноза се односи на локални регистар шема. Изазов аутентификације проксија или одбијено одредиште каснији је, другачији резултат. Задржите обе регистрације фабрика док истражујете те одговоре.