Erreur de proxy HttpClient 4 : le protocole http n'est pas pris en charge
Conservez la fabrique HTTP simple dans un registre Apache HttpClient 4 personnalisé lorsqu'une route HTTPS se connecte d'abord à un proxy HTTP.
Dans une application Apache HttpClient 4, une destination HTTPS ne signifie pas que chaque connexion commence par TLS. Un proxy HTTP ordinaire est atteint par une connexion en clair avant que CONNECT n'ouvre le tunnel et que TLS ne soit empilé vers la destination.
Si un gestionnaire de connexions personnalisé n'enregistre que https, le premier saut par le proxy peut échouer avec UnsupportedSchemeException: http protocol is not supported.
Pour l'API 4.5, incluez les deux fabriques lors de la construction de ce gestionnaire :
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 est le SSLConnectionSocketFactory existant de l'application, avec sa vérification de confiance et de nom d'hôte prévue. Les types affichés appartiennent aux paquets org.apache.http d'Apache 4. L'extrait suppose l'inférence de type des variables locales de Java ; un code Java plus ancien peut utiliser des types explicites.
Attachez le gestionnaire corrigé au client réellement utilisé pour la requête. Pour une requête HTTPS publique autorisée sans authentification de proxy, une entrée HTTP de la liste de proxys HTTP peut renseigner l'adresse de proxy de HttpHost. Configurer un autre builder ne met pas à jour un client déjà construit.
Examinez aussi la propriété du builder : HttpClientBuilder documente qu'un gestionnaire de connexions fourni explicitement peut supplanter ses entrées de configuration SSL distinctes. Placez les fabriques nécessaires dans le registre du gestionnaire au lieu de supposer qu'un appel ultérieur à setSSLContext remplacera ses éléments internes.
Ce diagnostic concerne le registre de schémas local. Un défi d'authentification de proxy ou une destination refusée est un résultat ultérieur et différent. Conservez les deux enregistrements de fabriques pendant l'examen de ces réponses.