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 कॉल त्याचे अंतर्गत बदलेल असे गृहीत धरण्याऐवजी.

हे निदान स्थानिक स्कीम नोंदणीशी संबंधित आहे. प्रॉक्सी प्रमाणीकरण आव्हान किंवा नाकारलेले गंतव्य हा नंतरचा, वेगळा निकाल आहे. त्या प्रतिसादांची चौकशी करताना दोन्ही फॅक्टरी नोंदी टिकवून ठेवा.

संबंधित लेख