У праграме на Apache HttpClient 4 HTTPS-прызначэнне не азначае, што кожнае злучэнне пачынаецца з TLS. Да звычайнага HTTP-проксі даходзяць праз незашыфраванае злучэнне, перш чым CONNECT адкрые тунель і TLS будзе накладзены ў бок прызначэння.

Калі ўласны менеджар злучэнняў рэгіструе толькі https, першы крок праз проксі можа скончыцца памылкай UnsupportedSchemeException: http protocol is not supported.

Для API 4.5 пры стварэнні гэтага менеджара ўключыце абедзве фабрыкі:

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 — гэта існуючая SSLConnectionSocketFactory праграмы з яе мэтавай праверкай даверу і імені хоста. Паказаныя тыпы належаць пакетам org.apache.http Apache 4. Фрагмент разлічвае на вывад тыпаў лакальных зменных Java; старэйшы код Java можа выкарыстоўваць яўныя тыпы.

Далучыце выпраўлены менеджар да кліента, які фактычна выкарыстоўваецца для запыту. Для дазволенага публічнага HTTPS-запыту без аўтэнтыфікацыі проксі HTTP-запіс са спісу HTTP-проксі можа запоўніць адрас проксі ў HttpHost. Наладка іншага будаўніка не абнаўляе ўжо створаны кліент.

Таксама праверце ўласнасць будаўніка: HttpClientBuilder дакументуе, што яўна перададзены менеджар злучэнняў можа перакрыць яго асобныя ўваходы канфігурацыі SSL. Змяшчайце патрэбныя фабрыкі ў рэестр менеджара, замест таго каб меркаваць, што пазнейшы выклік setSSLContext заменіць яго ўнутранасці.

Гэта дыягностыка датычыцца лакальнага рэестра схем. Запыт аўтэнтыфікацыі проксі або адхіленае прызначэнне — гэта пазнейшы, іншы вынік. Захоўвайце абедзве рэгістрацыі фабрык, пакуль даследуеце гэтыя адказы.

Падобныя артыкулы