HttpClient 4-proxyfel: http-protokollet stöds inte
Behåll den vanliga HTTP-fabriken i ett anpassat Apache HttpClient 4-register när en HTTPS-rutt först ansluter till en HTTP-proxy.
I ett Apache HttpClient 4-program innebär inte ett HTTPS-mål att varje anslutning börjar med TLS. En vanlig HTTP-proxy nås över en okrypterad anslutning innan CONNECT öppnar tunneln och TLS läggs lager på lager mot målet.
Om en anpassad anslutningshanterare bara registrerar https kan det första proxysprånget misslyckas med UnsupportedSchemeException: http protocol is not supported.
För 4.5-API:t måste båda fabrikerna ingå när den hanteraren byggs:
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 är programmets befintliga SSLConnectionSocketFactory, med den avsedda kontrollen av förtroende och värdnamn. Typerna som visas tillhör Apache 4:s org.apache.http-paket. Utdraget förutsätter Javas lokala variabeltypinferens; äldre Java-källkod kan använda explicita typer.
Koppla den rättade hanteraren till den klient som faktiskt används för begäran. För en tillåten offentlig HTTPS-begäran utan proxyautentisering kan en HTTP-post från HTTP-proxylistan fylla HttpHosts proxyadress. Att konfigurera en annan builder uppdaterar inte en redan byggd klient.
Undersök också builderens ägarskap: HttpClientBuilder dokumenterar att en uttryckligen levererad anslutningshanterare kan åsidosätta dess separata SSL-konfigurationsindata. Lägg de nödvändiga fabrikerna i hanterarens register i stället för att anta att ett senare setSSLContext-anrop ersätter dess inre.
Denna diagnos gäller det lokala schemaregistret. En proxyautentiseringsutmaning eller ett avvisat mål är ett senare, annat resultat. Behåll båda fabriksregistreringarna medan du undersöker dessa svar.