Python urllib: دمج توجيه الوكيل مع المصادقة الأساسية لموقع الويب
ادمج توجيه urllib ومصادقة Basic للوجهة في opener صريح واحد دون استبدال الـ opener العام مرتين.
استدعاء install_opener() مرتين لا يضيف الـ opener الثاني إلى الأول. إنه يستبدل الـ opener الافتراضي للوحدة. إذا كان كائن يعرف الوكيل وآخر يعرف تسجيل دخول الموقع، فابنِ opener واحدًا يضم المعالجات المطلوبة.
import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener)
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
ProxyHandler({'https': 'http://203.0.113.10:8080'}),
HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
body = response.read()الوكيل والوجهة أمثلة. لخدمة عامة قد يُوصل إليها عبر وكيل HTTP عام، توفر قائمة وكلاء HTTP نقاط نهاية مرشحة لمعالج التوجيه. يوجّه هذا الـ opener طلب HTTPS عبر وكيل HTTP ويعالج تحدّي Basic الخاص بالوجهة. وهو لا يضبط مصادقة الوكيل.
إذا كان الوكيل يتطلب أيضًا تسجيل دخول، فاختر ترتيبًا مدعومًا لمصادقة الوكيل بشكل منفصل. يحدث خطأ 407 عند CONNECT قبل أن تتمكن الوجهة من إصدار تحدّيها. إضافة بيانات اعتماد الموقع إلى مدير كلمات المرور لا يمكنها تلبية ذلك التبادل الأسبق.
استدعاء opener.open() مباشرة يُبقي الإعداد مع العملية. لا حاجة لتغيير الافتراضي على مستوى الوحدة إلا إذا كان التطبيق يريد عمدًا أن تشترك كل الاستدعاءات المريحة في هذا الـ opener.