U aplikaciji s Apache HttpClient 4 HTTPS odredište ne znači da svaka veza počinje TLS-om. Do običnog HTTP proxyja dolazi se preko nešifrirane veze prije nego CONNECT otvori tunel i TLS se složi prema odredištu.

Ako prilagođeni upravitelj veza registruje samo https, prvi skok kroz proxy može pasti s UnsupportedSchemeException: http protocol is not supported.

Za 4.5 API uključite obje tvornice pri izgradnji tog upravitelja:

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 postojeći SSLConnectionSocketFactory aplikacije, s namjeravanom provjerom povjerenja i imena hosta. Prikazani tipovi pripadaju paketima org.apache.http Apache 4. Isječak pretpostavlja izvođenje tipova lokalnih varijabli u Javi; stariji Java kod može koristiti eksplicitne tipove.

Pričvrstite ispravljeni upravitelj na klijenta koji se stvarno koristi za zahtjev. Za dopušten javni HTTPS zahtjev bez autentifikacije proxyja, HTTP unos iz popisa HTTP proxyja može popuniti proxy adresu u HttpHost. Konfiguriranje drugog buildera ne ažurira već izgrađenog klijenta.

Također provjerite vlasništvo buildera: HttpClientBuilder dokumentuje da eksplicitno dostavljen upravitelj veza može nadjačati njegove zasebne SSL konfiguracijske ulaze. Stavite potrebne tvornice u registar upravitelja umjesto da pretpostavite da će kasniji poziv setSSLContext zamijeniti njegovu unutrašnjost.

Ova dijagnoza tiče se lokalnog registra shema. Izazov autentifikacije proxyja ili odbijeno odredište kasniji je, drugačiji rezultat. Zadržite obje registracije tvornica dok ispitujete te odgovore.

Povezani članci