خطأ الوكيل في HttpClient 4: بروتوكول http غير مدعوم
أبقِ مصنع HTTP العادي في سجل Apache HttpClient 4 المخصص عندما يتصل مسار HTTPS أولاً بوكيل HTTP.
في تطبيق Apache HttpClient 4، لا يعني وجهة HTTPS أن كل اتصال يبدأ بـ TLS. يُصل إلى وكيل HTTP عادي عبر اتصال غير مشفّر قبل أن يفتح CONNECT النفق وتُضاف طبقة TLS نحو الوجهة.
إذا سجّل مدير اتصالات مخصص https فقط، فقد تفشل أول قفزة عبر الوكيل بـ UnsupportedSchemeException: http protocol is not supported.
لواجهة 4.5، أدرج المصنعين معًا عند إنشاء ذلك المدير:
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 الموجود في التطبيق، مع الثقة المقصودة والتحقق من اسم المضيف. الأنواع المعروضة تنتمي إلى حزم org.apache.http في Apache 4. تفترض القطعة دعم استنتاج المتغيرات المحلية في Java؛ ويمكن لكود Java الأقدم استخدام أنواع صريحة.
اربط المدير المصحح بالعميل المستخدم فعلاً في الطلب. بالنسبة لطلب HTTPS عام مسموح دون مصادقة وكيل، يمكن لمدخل HTTP من قائمة وكلاء HTTP أن يملأ عنوان الوكيل في HttpHost. وتهيئة منشئ آخر لا تحدّث عميلاً أُنشئ بالفعل.
افحص أيضًا ملكية المنشئ: توثّق HttpClientBuilder أن مدير اتصالات مُقدَّمًا صراحةً يمكنه تجاوز مدخلات تهيئة SSL المنفصلة. ضع المصانع المطلوبة في سجل المدير بدلاً من افتراض أن استدعاء setSSLContext لاحقًا سيستبدل داخلياته.
يتعلق هذا التشخيص بسجل المخططات المحلي. تحدي مصادقة الوكيل أو وجهة مرفوضة نتيجة لاحقة ومختلفة. أبقِ تسجيلي المصنعين أثناء التحقيق في تلك الاستجابات.