जब केवल एक urllib opener को सीधे जुड़ना हो, तो ProxyHandler को खाली मैपिंग दें:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

खाली डिक्शनरी कोई प्रॉक्सी रास्ता नहीं देती। मैपिंग छोड़ देने पर हैंडलर परिवेश और प्लेटफ़ॉर्म की सेटिंग से प्रॉक्सी खोजता है। निर्माण के ये दोनों तरीके अलग नीतियाँ व्यक्त करते हैं।

उदाहरण Python की मानक लाइब्रेरी इस्तेमाल करता है और सामान्य HTTPS सत्यापन बनाए रखता है। with ब्लॉक प्रतिक्रिया बंद करता है, तब भी जब किसी अपवाद के कारण ब्लॉक से बाहर निकलना पड़े।

एक ही अनुप्रयोग में सीधे और प्रॉक्सी वाले अनुरोध

दो opener दोनों नीतियाँ रख सकते हैं, बिना कॉल के बीच परिवेश चर बदले:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

लूपबैक पते को अपने HTTP प्रॉक्सी से बदलें, या प्रॉक्सी वाली तुलना के लिए HTTP प्रॉक्सी सूची से उम्मीदवार चुनें। सेवा की अनुमति होने पर यह HTTPS लक्ष्य का कनेक्शन CONNECT के ज़रिए ले जा सकता है। लिसनर का प्रोटोकॉल और प्रमाणीकरण समर्थन हैंडलर के अनुरूप होना चाहिए।

डिफ़ॉल्ट opener को न बदलें

रास्ते के ज़िम्मेदार ऑब्जेक्ट से direct.open या proxied.open कॉल करें। install_opener उस प्रक्रिया-व्यापी डिफ़ॉल्ट को बदलता है जिसका उपयोग urllib के सुविधाजनक कॉल करते हैं; इसलिए इसका इस्तेमाल करने वाली लाइब्रेरी असंबंधित कोड को प्रभावित कर सकती है। ऊपर के अलग opener के लिए इसकी आवश्यकता नहीं है।

timeout आर्ग्युमेंट एक ऑपरेशन की सेटिंग है, हर ट्रांसफ़र के पूरे वास्तविक समय की सीमा नहीं। केवल काम के लिए आवश्यक डेटा पढ़ें और कुल समय का सख्त बजट होने पर उच्च स्तर की समय-सीमा लगाएँ।

ये opener ऑब्जेक्ट दूसरी लाइब्रेरी का क्लाइंट, मौजूदा प्रक्रिया या ब्राउज़र की प्रॉक्सी सेटिंग नहीं बदलते।

संबंधित लेख