Erro de proxy en HttpClient 4: o protocolo http non é compatible
Manteña a fábrica HTTP simple nun rexistro personalizado de Apache HttpClient 4 cando unha ruta HTTPS se conecta primeiro a un proxy HTTP.
Nunha aplicación con Apache HttpClient 4, un destino HTTPS non significa que cada conexión comece con TLS. A un proxy HTTP normal chégase mediante unha conexión sen cifrar antes de que CONNECT abra o túnel e TLS se superpoña cara ao destino.
Se un xestor de conexións personalizado só rexistra https, o primeiro salto polo proxy pode fallar con UnsupportedSchemeException: http protocol is not supported.
Para a API 4.5, inclúa ambas as fábricas ao construír ese xestor:
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 é o SSLConnectionSocketFactory existente da aplicación, coa súa verificación prevista de confianza e de nome de host. Os tipos mostrados pertencen aos paquetes org.apache.http de Apache 4. O fragmento supón a inferencia de tipos de variables locais de Java; o código Java máis antigo pode usar tipos explícitos.
Vincule o xestor corrixido ao cliente que realmente se usa para a solicitude. Para unha solicitude HTTPS pública permitida sen autenticación de proxy, unha entrada HTTP da lista de proxies HTTP pode encher o enderezo de proxy de HttpHost. Configurar outro builder non actualiza un cliente xa construído.
Revise tamén a propiedade do builder: HttpClientBuilder documenta que un xestor de conexións fornecido explicitamente pode anular as súas entradas separadas de configuración SSL. Poña as fábricas necesarias no rexistro do xestor en lugar de supor que unha chamada posterior a setSSLContext substituirá as súas interioridades.
Este diagnóstico refírese ao rexistro local de esquemas. Un desafío de autenticación de proxy ou un destino denegado é un resultado posterior e distinto. Conserve ambos os rexistros de fábricas mentres investiga esas respostas.