Apache HttpClient 4 қолданбасында HTTPS мақсаты әр қосылымның TLS-пен басталатынын білдірмейді. Кәдімгі HTTP проксиге шифрланбаған қосылым арқылы жетеді, содан кейін CONNECT туннельді ашады және TLS мақсатқа қарай қабатталады.

Егер арнайы қосылым менеджері тек https тіркесе, прокси арқылы бірінші секіру UnsupportedSchemeException: http protocol is not supported қатесімен сәтсіз аяқталуы мүмкін.

4.5 API үшін сол менеджерді құру кезінде екі фабриканы да қосыңыз:

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-і, оның көзделген сенім және хост атауын тексеруімен. Көрсетілген типтер Apache 4-тің org.apache.http пакеттеріне жатады. Бұл үзінді Java-ның жергілікті айнымалы типтерін шығаруға сүйенеді; ескі Java коды айқын типтерді қолдана алады.

Түзетілген менеджерді сұраныста нақты қолданылатын клиентке тіркеңіз. Прокси аутентификациясынсыз рұқсат етілген жалпыға ашық HTTPS сұранысы үшін HTTP прокси тізімінен HTTP жазбасы HttpHost-тың прокси мекенжайын толтыра алады. Басқа builder конфигурациялау бұрын құрылған клиентті жаңартпайды.

Builder иелігін де тексеріңіз: HttpClientBuilder айқын берілген қосылым менеджері оның жеке SSL конфигурация кірістерін басып кетуі мүмкін екенін құжаттайды. Қажетті фабрикаларды менеджер тізіліміне қойыңыз, кейінгі setSSLContext шақыруы оның ішкі бөлігін алмастырады деп есептеудің орнына.

Бұл диагностика жергілікті схема тізіліміне қатысты. Прокси аутентификация шақыруы немесе қабылданбаған мақсат — кейінгі, өзгеше нәтиже. Осы жауаптарды зерттеу кезінде екі фабрика тіркелімін де сақтаңыз.

Қатысты мақалалар