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 କଲ ଏହାର ଆଭ୍ୟନ୍ତର ବଦଳାଇବ ବୋଲି ନ ଭାବି।
ଏହି ନିଦାନ ସ୍ଥାନୀୟ ସ୍କିମ ରେଜିଷ୍ଟ୍ରି ସମ୍ବନ୍ଧୀୟ। ପ୍ରକ୍ସି ପ୍ରମାଣୀକରଣ ଚ୍ୟାଲେଞ୍ଜ କିମ୍ବା ପ୍ରତ୍ୟାଖ୍ୟାତ ଗନ୍ତବ୍ୟ ପରବର୍ତ୍ତୀ, ଭିନ୍ନ ଫଳାଫଳ। ସେହି ପ୍ରତିକ୍ରିୟାଗୁଡ଼ିକ ଅନୁସନ୍ଧାନ କରୁଥିବା ବେଳେ ଉଭୟ ଫ୍ୟାକ୍ଟ୍ରି ପଞ୍ଜୀକରଣ ରଖନ୍ତୁ।