HttpClient 4 ਪ੍ਰੌਕਸੀ ਗਲਤੀ: http ਪ੍ਰੋਟੋਕੋਲ ਸਮਰਥਿਤ ਨਹੀਂ
ਜਦੋਂ HTTPS ਮਾਰਗ ਪਹਿਲਾਂ HTTP ਪ੍ਰੌਕਸੀ ਨਾਲ ਜੁੜਦਾ ਹੈ ਤਾਂ ਸਧਾਰਨ HTTP ਫੈਕਟਰੀ ਨੂੰ ਕਸਟਮ Apache HttpClient 4 ਰਜਿਸਟਰੀ ਵਿੱਚ ਰੱਖੋ।
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 ਕਾਲ ਇਸਦੇ ਅੰਦਰੂਨੀ ਹਿੱਸੇ ਬਦਲ ਦੇਵੇਗੀ ਮੰਨਣ ਦੀ ਬਜਾਏ।
ਇਹ ਨਿਦਾਨ ਸਥਾਨਕ ਸਕੀਮ ਰਜਿਸਟਰੀ ਬਾਰੇ ਹੈ। ਪ੍ਰੌਕਸੀ ਪ੍ਰਮਾਣਿਕਤਾ ਚੁਣੌਤੀ ਜਾਂ ਰੱਦ ਕੀਤੀ ਮੰਜ਼ਿਲ ਬਾਅਦ ਵਾਲਾ, ਵੱਖਰਾ ਨਤੀਜਾ ਹੈ। ਉਨ੍ਹਾਂ ਜਵਾਬਾਂ ਦੀ ਜਾਂਚ ਕਰਦੇ ਸਮੇਂ ਦੋਵੇਂ ਫੈਕਟਰੀ ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਰੱਖੋ।