HttpClient 4 প্রক্সি ত্রুটি: http প্রোটোকল সমর্থিত নয়
HTTPS রুট প্রথমে HTTP প্রক্সিতে সংযোগ করলে কাস্টম Apache HttpClient 4 রেজিস্ট্রিতে সাধারণ HTTP ফ্যাক্টরি রাখুন।
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-এর প্রক্সি ঠিকানা পূরণ করতে পারে। ভিন্ন বিল্ডার কনফিগার করলে আগেই তৈরি ক্লায়েন্ট আপডেট হয় না।
বিল্ডারের মালিকানাও পরীক্ষা করুন: HttpClientBuilder নথিভুক্ত করে যে স্পষ্টভাবে সরবরাহ করা সংযোগ ম্যানেজার তার পৃথক SSL কনফিগারেশন ইনপুট উপেক্ষা করতে পারে। প্রয়োজনীয় ফ্যাক্টরিগুলো ম্যানেজারের রেজিস্ট্রিতে রাখুন, পরে setSSLContext কল তার অন্তর্নিহিত অংশ বদলে দেবে ধরে নেওয়ার বদলে।
এই রোগনির্ণয় স্থানীয় স্কিম রেজিস্ট্রি নিয়ে। প্রক্সি প্রমাণীকরণের চ্যালেঞ্জ বা প্রত্যাখ্যাত গন্তব্য পরের, ভিন্ন ফলাফল। ওই প্রতিক্রিয়াগুলো তদন্ত করার সময় দুটি ফ্যাক্টরি নিবন্ধনই সংরক্ষণ করুন।