एका 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 ऑब्जेक्ट दुसऱ्या लायब्ररीचा क्लायंट, अस्तित्वात असलेली प्रक्रिया किंवा ब्राउझरची प्रॉक्सी सेटिंग बदलत नाहीत.

संबंधित लेख