from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

استدعِ طريقة open الخاصة بهذا الفاتح عندما يكون المسار من اختصاص الفحص. قد يأتي منفذ HTTP في المثال من خدمتك أو من قائمة بروكسي HTTP للفحوص العامة. يوضّح المقطع الملكية؛ ولا يحدّد سياسة المصادقة أو السلامة كاملة. أبقِ أي معالجات خاصة بالحساب مرتبطة بذلك العميل المقصود.

urllib.request.install_opener() يغيّر الافتراضي على مستوى العملية الذي تستخدمه استدعاءات urlopen() اللاحقة على مستوى الوحدة. لذلك قد يترك فاحص يمرّ على البروكسيات طلبات غير ذات صلة تستخدم آخر نقطة نهاية له. التثبيت المؤقت والاستعادة عند التنظيف لا يزالان يسمحان للطلبات المتزامنة بالعمل أثناء التغيير المشترك.

socket.setdefaulttimeout() يغيّر بالمثل الافتراضيات للمقابس التي تُنشأ بعده. استخدم المهلة على مستوى العملية عندما يجب أن يتلقاها الفحص وحده.

أغلق استجابات الفحص وأبقِ نتائجها محددة: استجابة خطأ HTTP ليست تلقائيًا مستمع بروكسي ميتًا. إذا استُخدم فحص urllib المتزامن في خدمة غير متزامنة، فانقل العمل الحاجز إلى عامل مناسب؛ قرار التنفيذ هذا لا يجعل تغيير الفاتح العالمي معزولًا.

ينبغي أن يعيد الفحص ملاحظته دون أن يترك سياسة شبكة أخرى خلفه. كائن العميل الخاص به والعملية المحدودة يجعلان ذلك الحد صريحًا.

مقالات ذات صلة