install_opener() दोन वेळा कॉल केल्याने दुसरा opener पहिल्याशी जोडला जात नाही. तो मॉड्यूलचा डीफॉल्ट opener बदलतो. एक वस्तू प्रॉक्सी जाणत असेल आणि दुसरी वेबसाइट लॉगिन जाणत असेल, तर आवश्यक handlers असलेला एकच 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 प्रॉक्सी सूची राउटिंग handler साठी उमेदवार endpoints देते. हा opener HTTPS विनंती HTTP प्रॉक्सीद्वारे पाठवतो आणि गंतव्याचे Basic आव्हान हाताळतो. तो प्रॉक्सी प्रमाणीकरण कॉन्फिगर करत नाही.

प्रॉक्सीलाही लॉगिन हवे असल्यास, समर्थित प्रॉक्सी-प्रमाणीकरण रचना वेगळी निवडा. CONNECT च्या वेळी 407 गंतव्य स्वतःचे आव्हान देऊ शकण्यापूर्वी होते. पासवर्ड मॅनेजरमध्ये वेबसाइट क्रेडेन्शियल्स जोडल्याने ती आधीची देवाणघेवाण पूर्ण होऊ शकत नाही.

opener.open() थेट कॉल केल्याने कॉन्फिगरेशन ऑपरेशनसोबत राहते. मॉड्यूल-व्यापी डीफॉल्ट बदलण्याची गरज नाही, जोपर्यंत अनुप्रयोगाला जाणूनबुजून सर्व सोयीच्या कॉलनी हा opener सामायिक करावा असे वाटत नाही.

संबंधित लेख