Error de proxy a HttpClient 4: el protocol http no és compatible
Mantingueu la fàbrica HTTP simple en un registre personalitzat d'Apache HttpClient 4 quan una ruta HTTPS es connecta primer a un proxy HTTP.
En una aplicació amb Apache HttpClient 4, una destinació HTTPS no vol dir que cada connexió comenci amb TLS. S'arriba a un proxy HTTP ordinari per una connexió sense xifrar abans que CONNECT obri el túnel i TLS es col·loqui cap a la destinació.
Si un gestor de connexions personalitzat només registra https, el primer salt pel proxy pot fallar amb UnsupportedSchemeException: http protocol is not supported.
Per a l'API 4.5, incloeu les dues fàbriques en construir aquest gestor:
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 és l'SSLConnectionSocketFactory existent de l'aplicació, amb la verificació de confiança i de nom d'amfitrió prevista. Els tipus mostrats pertanyen als paquets org.apache.http d'Apache 4. El fragment pressuposa la inferència de tipus de variables locals de Java; el codi Java més antic pot fer servir tipus explícits.
Adjunteu el gestor corregit al client que realment s'utilitza per a la petició. Per a una petició HTTPS pública permesa sense autenticació de proxy, una entrada HTTP de la llista de proxys HTTP pot omplir l'adreça de proxy d'HttpHost. Configurar un altre builder no actualitza un client ja construït.
Reviseu també la propietat del builder: HttpClientBuilder documenta que un gestor de connexions proporcionat explícitament pot substituir les seves entrades separades de configuració SSL. Poseu les fàbriques necessàries al registre del gestor en lloc de suposar que una crida posterior a setSSLContext en reemplaçarà les interioritats.
Aquest diagnòstic afecta el registre local d'esquemes. Un repte d'autenticació de proxy o una destinació denegada és un resultat posterior i diferent. Mantingueu els dos registres de fàbriques mentre investigueu aquestes respostes.