HttpClient 4-proxyfout: "http protocol is not supported"
Hou die gewone HTTP-fabriek in 'n pasgemaakte Apache HttpClient 4-register wanneer 'n HTTPS-roete eerste na 'n HTTP-proxy verbind.
In 'n Apache HttpClient 4-toepassing beteken 'n HTTPS-bestemming nie dat elke verbinding met TLS begin nie. 'n Gewone HTTP-proxy word oor 'n gewone verbinding bereik voordat CONNECT die tonnel oopmaak en TLS na die bestemming gelê word.
As 'n pasgemaakte verbindingsbestuurder net https registreer, kan die eerste proxy-hop met UnsupportedSchemeException: http protocol is not supported misluk.
Vir die 4.5-API moet albei fabrieke ingesluit word wanneer daardie bestuurder gebou word:
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 is die toepassing se bestaande SSLConnectionSocketFactory, met sy beoogde vertroue- en gasheernaamverifikasie. Die tipes wat gewys word, hoort by Apache 4 se org.apache.http-pakkette. Die fragment veronderstel Java se plaaslike veranderlike-tipe-afleiding; ouer Java-bronkode kan eksplisiete tipes gebruik.
Koppel die reggestelde bestuurder aan die kliënt wat werklik vir die versoek gebruik word. Vir 'n toegelate publieke HTTPS-versoek sonder proxy-verifikasie kan 'n HTTP-inskrywing uit die HTTP-proxylys HttpHost se proxy-adres vul. Om 'n ander bouer te konfigureer, dateer nie 'n reeds geskepte kliënt op nie.
Ondersoek ook die eienaarskap van die bouer: HttpClientBuilder dokumenteer dat 'n eksplisiet verskafde verbindingsbestuurder sy afsonderlike SSL-konfigurasie-insette kan oorheers. Sit die vereiste fabrieke in die bestuurder se register in plaas daarvan om aan te neem dat 'n latere setSSLContext-oproep sy binnekant sal vervang.
Hierdie diagnose raak die plaaslike skema-register. 'n Proxy-verifikasie-uitdaging of 'n geweierde bestemming is 'n latere, ander resultaat. Behou beide fabriek-registrasies terwyl jy daardie response ondersoek.