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 యాజమాన్యాన్ని కూడా తనిఖీ చేయండి: స్పష్టంగా అందించిన కనెక్షన్ మేనేజర్ దాని ప్రత్యేక SSL కాన్ఫిగరేషన్ ఇన్‌పుట్‌లను అధిగమించగలదని HttpClientBuilder నమోదు చేస్తుంది. అవసరమైన ఫ్యాక్టరీలను మేనేజర్ రిజిస్ట్రీలో ఉంచండి, తర్వాత setSSLContext పిలుపు దాని అంతర్భాగాన్ని భర్తీ చేస్తుందని ఊహించడం బదులు.

ఈ నిర్ధారణ స్థానిక స్కీమ్ రిజిస్ట్రీకి సంబంధించినది. ప్రాక్సీ ప్రామాణీకరణ సవాలు లేదా తిరస్కరించిన గమ్యం తర్వాతి, భిన్న ఫలితం. ఆ ప్రతిస్పందనలను పరిశోధిస్తున్నప్పుడు రెండు ఫ్యాక్టరీ నమోదులను నిలుపుకోండి.

సంబంధిత వ్యాసాలు