Chyba proxy v HttpClient 4: protokol http není podporován
Ponechte obyčejnou HTTP továrnu ve vlastním registru Apache HttpClient 4, když se HTTPS trasa nejprve připojuje k HTTP proxy.
V aplikaci s Apache HttpClient 4 cílové HTTPS neznamená, že každé připojení začíná TLS. K běžné HTTP proxy se přichází přes nešifrované připojení, než CONNECT otevře tunel a TLS se vrství směrem k cíli.
Pokud vlastní správce spojení registruje jen https, první krok přes proxy může selhat s UnsupportedSchemeException: http protocol is not supported.
Pro rozhraní 4.5 zahrňte při sestavování tohoto správce obě továrny:
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 je stávající SSLConnectionSocketFactory aplikace se zamýšleným ověřením důvěry a názvu hostitele. Uvedené typy patří do balíčků org.apache.http Apache 4. Úryvek předpokládá odvozování typů lokálních proměnných v Javě; starší kód Java může použít explicitní typy.
Připojte opraveného správce ke klientovi, který se pro požadavek skutečně používá. Pro povolený veřejný HTTPS požadavek bez ověřování proxy může HTTP záznam z seznamu HTTP proxy vyplnit adresu proxy v HttpHost. Konfigurace jiného builderu již vytvořeného klienta neaktualizuje.
Prověřte také vlastnictví builderu: HttpClientBuilder dokumentuje, že výslovně dodaný správce spojení může přepsat jeho samostatné vstupy konfigurace SSL. Vložte potřebné továrny do registru správce, místo abyste předpokládali, že pozdější volání setSSLContext nahradí jeho vnitřnosti.
Tato diagnóza se týká místního registru schémat. Výzva k ověření proxy nebo odmítnutý cíl je pozdější, jiný výsledek. Zachovejte obě registrace továren, dokud tyto odpovědi zkoumáte.