Python 3.7

urllib.request - URL खोलने के लिए एक्स्टेंसिबल लाइब्रेरी




python

urllib.request - URL खोलने के लिए एक्स्टेंसिबल लाइब्रेरी

स्रोत कोड: Lib/urllib/request.py

urllib.request मॉड्यूल उन फ़ंक्शंस और कक्षाओं को परिभाषित करता है जो जटिल दुनिया में URL (ज्यादातर HTTP) खोलने में मदद करते हैं - मूल और पचाने का प्रमाणीकरण, पुनर्निर्देशन, कुकीज़ और बहुत कुछ।

यह भी देखें

उच्च-स्तरीय HTTP क्लाइंट इंटरफ़ेस के लिए अनुरोध पैकेज की अनुशंसा की जाती है।

urllib.request मॉड्यूल निम्नलिखित कार्यों को परिभाषित करता है:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

URL url खोलें, जो या तो एक स्ट्रिंग या Request ऑब्जेक्ट हो सकता है।

डेटा एक ऑब्जेक्ट होना चाहिए जो अतिरिक्त डेटा को सर्वर को भेजने के लिए निर्दिष्ट करता है, या None यदि ऐसा कोई डेटा आवश्यक नहीं है। विवरण के लिए Request देखें।

urllib.request मॉड्यूल HTTP / 1.1 का उपयोग करता है और इसमें Connection:close इसके HTTP अनुरोधों में Connection:close शीर्षलेख शामिल हैं।

वैकल्पिक टाइमआउट पैरामीटर कनेक्शन के प्रयास को अवरुद्ध करने के संचालन के लिए सेकंड में एक टाइमआउट निर्दिष्ट करता है (यदि निर्दिष्ट नहीं है, वैश्विक डिफ़ॉल्ट टाइमआउट सेटिंग का उपयोग किया जाएगा)। यह वास्तव में केवल HTTP, HTTPS और FTP कनेक्शन के लिए काम करता है।

यदि संदर्भ निर्दिष्ट किया गया है, तो यह विभिन्न एसएसएल विकल्पों का वर्णन करने वाला एक ssl.SSLContext उदाहरण होना चाहिए। अधिक जानकारी के लिए HTTPSConnection देखें।

वैकल्पिक कैफे और कैपेथ पैरामीटर एचटीटीपीएस अनुरोधों के लिए विश्वसनीय सीए प्रमाणपत्रों का एक सेट निर्दिष्ट करते हैं। कैफ़ाइल को CA प्रमाणपत्रों के बंडल वाली एकल फ़ाइल की ओर संकेत करना चाहिए, जबकि कैपेथ को हैशेड प्रमाणपत्र फ़ाइलों की निर्देशिका की ओर संकेत करना चाहिए। अधिक जानकारी ssl.SSLContext.load_verify_locations() में ssl.SSLContext.load_verify_locations() जा सकती है।

कैडफ़ॉल्ट पैरामीटर को अनदेखा किया जाता है।

यह फ़ंक्शन हमेशा एक ऑब्जेक्ट देता है जो संदर्भ प्रबंधक के रूप में काम कर सकता है और इस तरह के तरीके हैं

  • geturl() - पुनः प्राप्त संसाधन का URL लौटाएं, आमतौर पर यह निर्धारित करने के लिए उपयोग किया जाता है कि क्या पुनर्निर्देशित किया गया था
  • info() - पृष्ठ की मेटा-जानकारी, जैसे हेडर, एक email.message_from_string() उदाहरण के रूप में email.message_from_string() HTTP हेडर के लिए त्वरित संदर्भ देखें)
  • getcode() - प्रतिक्रिया की HTTP स्थिति कोड लौटाएं।

HTTP और HTTPS URL के लिए, यह फ़ंक्शन http.client.HTTPResponse ऑब्जेक्ट को थोड़ा संशोधित http.client.HTTPResponse लौटाता है। उपरोक्त तीन नई विधियों के अलावा, msg विशेषता में reason विशेषता के रूप में एक ही जानकारी है - कारण वाक्यांश सर्वर द्वारा लौटाया गया - प्रतिक्रिया हेडर के बजाय जैसा कि http.client.HTTPResponse लिए प्रलेखन में निर्दिष्ट है।

FTP, फ़ाइल, और डेटा URL और अनुरोधों के लिए स्पष्ट रूप से विरासत URLopener और FancyURLopener कक्षाओं द्वारा नियंत्रित किया जाता है, यह फ़ंक्शन urllib.response.addinfourl ऑब्जेक्ट देता है।

प्रोटोकॉल त्रुटियों पर URLError उठाता है।

ध्यान दें कि यदि कोई हैंडलर अनुरोध नहीं संभालता है, तो कोई भी वापस None जा सकता है (हालांकि डिफ़ॉल्ट रूप से स्थापित ग्लोबल OpenerDirector का उपयोग करता है यह सुनिश्चित करने के लिए कि ऐसा कभी नहीं होता)

इसके अलावा, यदि प्रॉक्सी सेटिंग्स का पता लगाया जाता है (उदाहरण के लिए, जब *_proxy जैसे *_proxy पर्यावरण चर सेट किया जाता है), ProxyHandler डिफ़ॉल्ट रूप से स्थापित है और सुनिश्चित करता है कि अनुरोध प्रॉक्सी के माध्यम से नियंत्रित किए जाते हैं।

पायथन 2.6 और इससे पहले की विरासत urllib.urlopen फ़ंक्शन को बंद कर दिया गया है; urllib.request.urlopen() पुराने urllib2.urlopen मेल खाती है। प्रॉक्सी हैंडलिंग, जो urllib.urlopen को डिक्शनरी पैरामीटर पास करके किया गया था, प्रॉक्सी प्रॉक्सी ऑब्जेक्ट्स का उपयोग करके प्राप्त किया जा सकता है।

3.2 संस्करण में बदला: कैफ़ाइल और कैपेथ को जोड़ा गया।

संस्करण 3.2 में परिवर्तित: HTTPS वर्चुअल होस्ट अब यदि संभव हो तो समर्थित है (अर्थात, यदि ssl.HAS_SNI सत्य है)।

संस्करण 3.2 में नया: डेटा एक चलने योग्य वस्तु हो सकता है।

संस्करण 3.3 में परिवर्तित: cadefault जोड़ा गया था।

संस्करण 3.4.3 में परिवर्तित: संदर्भ जोड़ा गया था।

संस्करण 3.6 के बाद से पदावनत: संदर्भ के पक्ष में कैफाइल , कैपेथ और कैडफॉल्ट को हटा दिया गया है। कृपया इसके बजाय ssl.SSLContext.load_cert_chain() उपयोग करें, या ssl.create_default_context() लिए सिस्टम के विश्वसनीय CA प्रमाणपत्र का चयन करें।

urllib.request.install_opener(opener)

डिफ़ॉल्ट वैश्विक सलामी बल्लेबाज के रूप में एक OpenerDirector उदाहरण स्थापित करें। एक सलामी बल्लेबाज को स्थापित करना केवल तभी आवश्यक है जब आप उस सलामी बल्लेबाज का उपयोग करने के लिए urlopen चाहते हैं; अन्यथा, केवल OpenerDirector.open() बजाय OpenerDirector.open() कॉल करें। कोड एक वास्तविक OpenerDirector लिए जाँच नहीं करता है, और उपयुक्त इंटरफ़ेस वाला कोई भी वर्ग काम करेगा।

urllib.request.build_opener([handler, ...])

एक OpenerDirector उदाहरण OpenerDirector , जो दिए गए क्रम में हैंडलर को चेन करता है। हैंडलर एस या तो BaseHandler उदाहरण हो सकते हैं, या BaseHandler उपवर्ग (जिस स्थिति में बिना किसी पैरामीटर के कंस्ट्रक्टर को कॉल करना संभव हो सकता है)। निम्नलिखित वर्गों के उदाहरण हैंडलर के सामने होंगे, जब तक कि हैंडलर में उन्हें शामिल नहीं किया जाता है, उनके उदाहरण या उनमें से उपवर्ग: प्रॉक्सीहैंडलर (यदि प्रॉक्सी सेटिंग्स का पता लगाया जाता है), HTTPHandler , HTTPDefaultErrorHandler , FTPHandler , FileHandler , FTPHandler , FileHandler HTTPErrorProcessor

यदि पायथन इंस्टॉलेशन में SSL सपोर्ट है (यानी, यदि ssl मॉड्यूल आयात किया जा सकता है), HTTPSHandler भी जोड़ा जाएगा।

BaseHandler उपवर्ग हैंडलर सूची में अपनी स्थिति को संशोधित करने के लिए अपने handler_order विशेषता को भी बदल सकता है।

urllib.request.pathname2url(path)

URL के पथ घटक में उपयोग किए जाने वाले फ़ॉर्म के लिए स्थानीय सिंटैक्स से पथनाम पथ परिवर्तित करें। यह एक पूर्ण URL का उत्पादन नहीं करता है। वापसी मान पहले से ही quote() फ़ंक्शन का उपयोग करके उद्धृत किया जाएगा।

urllib.request.url2pathname(path)

पथ घटक पथ को किसी पथ के लिए स्थानीय सिंटैक्स में प्रतिशत-एन्कोडेड URL से कनवर्ट करें। यह एक पूर्ण URL स्वीकार नहीं करता है। यह फ़ंक्शन रास्ते को डिकोड करने के लिए unquote() का उपयोग करता है।

urllib.request.getproxies()

यह सहायक फ़ंक्शन प्रॉक्सी सर्वर URL मैपिंग के लिए योजना का एक शब्दकोश लौटाता है। यह सभी ऑपरेटिंग सिस्टम के लिए पहले असंवेदनशील दृष्टिकोण में, <scheme>_proxy नाम के चर के लिए पर्यावरण को स्कैन करता है, और जब यह नहीं मिल सकता है, तो मैक ओएस एक्स के लिए मैक ओएसएक्स सिस्टम कॉन्फ़िगरेशन और विंडोज के लिए विंडोज सिस्टम रजिस्ट्री से प्रॉक्सी जानकारी की तलाश करता है। । यदि लोअरकेस और अपरकेस वातावरण चर मौजूद हैं (और असहमत), तो लोअरकेस पसंद किया जाता है।

ध्यान दें

यदि पर्यावरण चर REQUEST_METHOD सेट है, जो आमतौर पर इंगित करता है कि आपकी स्क्रिप्ट CGI वातावरण में चल रही है, तो पर्यावरण चर HTTP_PROXY (अपरकेस _PROXY ) को अनदेखा कर दिया जाएगा। इसका कारण यह है कि चर "प्रॉक्सी:" HTTP हेडर का उपयोग करके क्लाइंट द्वारा इंजेक्ट किया जा सकता है। यदि आपको CGI वातावरण में HTTP प्रॉक्सी का उपयोग करने की आवश्यकता है, तो या तो ProxyHandler स्पष्ट रूप से उपयोग करें, या सुनिश्चित करें कि चर नाम लोअरकेस (या कम से कम _proxy प्रत्यय) में है।

निम्नलिखित कक्षाएं प्रदान की जाती हैं:

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

यह वर्ग URL अनुरोध का एक अमूर्त हिस्सा है।

url एक स्ट्रिंग होना चाहिए जिसमें एक मान्य URL हो।

डेटा एक ऑब्जेक्ट होना चाहिए जो अतिरिक्त डेटा को सर्वर पर भेजने के लिए निर्दिष्ट करता है, या यदि ऐसा कोई डेटा आवश्यक None तो कोई None नहीं। वर्तमान में HTTP अनुरोध केवल डेटा का उपयोग करने वाले हैं । समर्थित ऑब्जेक्ट प्रकारों में बाइट्स, फ़ाइल जैसी वस्तुएं और पुनरावृत्तियाँ शामिल हैं। यदि कोई Content-Length और न ही Transfer-Encoding शीर्ष लेख फ़ील्ड प्रदान की गई है, तो HTTPHandler इन हेडरों को डेटा के प्रकार के अनुसार सेट करेगा। Content-Length का उपयोग बाइट्स ऑब्जेक्ट्स को भेजने के लिए किया जाएगा, जबकि Transfer-Encoding: chunked RFC 7230 में निर्दिष्ट के रूप में Transfer-Encoding: chunked , धारा 3.3.1 का उपयोग फ़ाइलों और अन्य पुनरावृत्तियों को भेजने के लिए किया जाएगा।

HTTP POST अनुरोध विधि के लिए, डेटा मानक एप्लिकेशन / x-www-form-urlencoded प्रारूप में एक बफर होना चाहिए। urllib.parse.urlencode() फ़ंक्शन 2-ट्यूपल्स की मैपिंग या अनुक्रम लेता है और इस प्रारूप में ASCII स्ट्रिंग लौटाता है। डेटा पैरामीटर के रूप में उपयोग किए जाने से पहले इसे बाइट्स के लिए एन्कोड किया जाना चाहिए।

हेडर एक शब्दकोश होना चाहिए, और माना जाएगा जैसे कि add_header() को प्रत्येक कुंजी और मान के साथ तर्क के रूप में बुलाया गया था। इसका उपयोग अक्सर User-Agent हेडर मूल्य को "स्पूफ" करने के लिए किया जाता है, जिसका उपयोग ब्राउज़र द्वारा स्वयं की पहचान करने के लिए किया जाता है - कुछ HTTP सर्वर केवल स्क्रिप्ट के विपरीत सामान्य ब्राउज़र से आने वाले अनुरोधों की अनुमति देते हैं। उदाहरण के लिए, मोज़िला फ़ायरफ़ॉक्स खुद की पहचान "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11" , जबकि "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11" डिफ़ॉल्ट उपयोगकर्ता एजेंट स्ट्रिंग "Python-urllib/2.6" (पायथन पर) 2.6)।

यदि डेटा तर्क मौजूद है तो एक उपयुक्त Content-Type हेडर शामिल किया जाना चाहिए। यदि यह शीर्ष लेख प्रदान नहीं किया गया है और डेटा कोई नहीं है, तो Content-Type: application/x-www-form-urlencoded डिफ़ॉल्ट के रूप में जोड़ा जाएगा।

अंतिम दो तर्क केवल तृतीय-पक्ष HTTP कुकीज़ के सही संचालन के लिए रुचि रखते हैं:

मूल लेनदेन का अनुरोध-मेजबान होना चाहिए, जैसा कि RFC 2965 द्वारा परिभाषित किया गया है । यह http.cookiejar.request_host(self) लिए डिफ़ॉल्ट है। यह मूल अनुरोध का होस्ट नाम या आईपी पता है जो उपयोगकर्ता द्वारा शुरू किया गया था। उदाहरण के लिए, यदि अनुरोध HTML दस्तावेज़ में एक छवि के लिए है, तो छवि वाले पृष्ठ के लिए अनुरोध का मेजबान होना चाहिए।

अप्राप्य को इंगित करना चाहिए कि क्या अनुरोध अपरिवर्तनीय है, जैसा कि RFC 2965 द्वारा परिभाषित किया गया है । यह False । एक अपरिवर्तनीय अनुरोध वह है जिसके URL में उपयोगकर्ता के पास अनुमोदन करने का विकल्प नहीं है। उदाहरण के लिए, यदि अनुरोध HTML दस्तावेज़ में एक छवि के लिए है, और उपयोगकर्ता के पास छवि को स्वचालित लाने के लिए कोई विकल्प नहीं है, तो यह सच होना चाहिए।

विधि एक स्ट्रिंग होनी चाहिए जो HTTP अनुरोध विधि को इंगित करती है जिसका उपयोग किया जाएगा (जैसे 'HEAD' )। यदि प्रदान किया जाता है, तो इसका मान method विशेषता में संग्रहीत किया जाता है और इसे get_method() द्वारा उपयोग किया जाता है। यदि डेटा None या 'POST' अन्यथा डिफ़ॉल्ट 'GET' है। कक्षा में ही method विशेषता सेट करके उपवर्ग एक अलग डिफ़ॉल्ट विधि का संकेत कर सकते हैं।

ध्यान दें

यदि डेटा ऑब्जेक्ट एक से अधिक बार अपनी सामग्री देने में असमर्थ है (उदाहरण के लिए एक फ़ाइल या पुनरावृत्ति जो केवल एक बार सामग्री का उत्पादन कर सकती है) और यह अनुरोध HTTP पुनर्निर्देशन या प्रमाणीकरण के लिए वापस लिया जाता है, तो अनुरोध अपेक्षित रूप से काम नहीं करेगा। हेडर के ठीक बाद HTTP सर्वर पर डेटा भेजा जाता है। पुस्तकालय में 100-जारी अपेक्षा के लिए कोई समर्थन नहीं है।

संस्करण 3.3 में बदला गया: method तर्क अनुरोध वर्ग में जोड़ा गया है।

संस्करण ४.४ में परिवर्तित: कक्षा स्तर पर डिफ़ॉल्ट method का संकेत दिया जा सकता है।

संस्करण 3.6 में परिवर्तित: यदि Content-Length प्रदान नहीं की गई है और डेटा न तो None और न ही एक बाइट्स ऑब्जेक्ट है, तो एक त्रुटि न उठाएं। इसके बजाय chunked स्थानांतरण एन्कोडिंग का उपयोग करने के लिए वापस गिरें।

class urllib.request.OpenerDirector

OpenerDirector वर्ग OpenerDirector माध्यम से एक साथ जंजीर खोलता है। यह संचालकों के जंजीरों का प्रबंधन, और त्रुटियों से उबरने का प्रबंधन करता है।

class urllib.request.BaseHandler

यह सभी पंजीकृत हैंडलर के लिए बेस क्लास है - और पंजीकरण के केवल सरल यांत्रिकी को संभालता है।

class urllib.request.HTTPDefaultErrorHandler

एक वर्ग जो HTTP त्रुटि प्रतिक्रियाओं के लिए एक डिफ़ॉल्ट हैंडलर को परिभाषित करता है; सभी प्रतिक्रियाओं को HTTPError अपवादों में बदल दिया गया है।

class urllib.request.HTTPRedirectHandler

पुनर्निर्देशन को संभालने के लिए एक वर्ग।

class urllib.request.HTTPCookieProcessor(cookiejar=None)

HTTP कुकीज़ को संभालने के लिए एक वर्ग।

class urllib.request.ProxyHandler(proxies=None)

प्रॉक्सी के माध्यम से जाने का अनुरोध करें। यदि परदे के पीछे दिया गया है, तो यह एक शब्दकोश मैपिंग प्रोटोकॉल नाम होना चाहिए जो कि प्रॉक्सी के URL में हो। डिफ़ॉल्ट वातावरण चर से <protocol>_proxy की सूची को पढ़ने के लिए है <protocol>_proxy । यदि कोई प्रॉक्सी वातावरण चर सेट नहीं किया जाता है, तो एक विंडोज़ वातावरण में प्रॉक्सी सेटिंग्स रजिस्ट्री के इंटरनेट सेटिंग्स अनुभाग से प्राप्त की जाती हैं, और एक मैक ओएस एक्स पर्यावरण प्रॉक्सी जानकारी में ओएस एक्स सिस्टम कॉन्फ़िगरेशन फ्रेमवर्क से पुनर्प्राप्त किया जाता है।

ऑटोडेटेड प्रॉक्सी को अक्षम करने के लिए एक खाली शब्दकोष पास करें।

no_proxy वातावरण चर का उपयोग उन मेजबानों को निर्दिष्ट करने के लिए किया जा सकता है जिन्हें प्रॉक्सी के माध्यम से नहीं पहुँचा जाना चाहिए; यदि सेट किया जाता है, तो यह होस्टनाम प्रत्यय की अल्पविराम से अलग की गई सूची होनी चाहिए, वैकल्पिक रूप से :port संलग्न, उदाहरण के लिए cern.ch,ncsa.uiuc.edu,some.host:8080

ध्यान दें

HTTP_PROXY को अनदेखा किया जाएगा यदि एक चर REQUEST_METHOD सेट किया गया है; getproxies() पर प्रलेखन देखें।

class urllib.request.HTTPPasswordMgr

(realm, uri) -> (user, password) मैपिंग का डेटाबेस रखें।

class urllib.request.HTTPPasswordMgrWithDefaultRealm

(realm, uri) -> (user, password) मैपिंग का डेटाबेस रखें। किसी के दायरे को कैच-ऑल रिअलम None माना जाता है, जो किसी अन्य दायरे में फिट होने पर खोजा जाता है।

class urllib.request.HTTPPasswordMgrWithPriorAuth

HTTPPasswordMgrWithDefaultRealm का एक प्रकार जिसमें uri -> is_authenticated डेटाबेस भी है uri -> is_authenticated मैपिंग। पहले एक 401 प्रतिक्रिया के लिए प्रतीक्षा करने के बजाय प्रमाणीकरण क्रेडेंशियल्स भेजने के लिए निर्धारित करने के लिए एक BasicAuth हैंडलर द्वारा उपयोग किया जा सकता है।

संस्करण 3.5 में नया।

class urllib.request.AbstractBasicAuthHandler(password_mgr=None)

यह एक मिक्स्ड क्लास है जो HTTP ऑथेंटिकेशन के साथ रिमोट होस्ट और प्रॉक्सी दोनों में मदद करता है। password_mgr , यदि दिया गया है, तो ऐसा कुछ होना चाहिए जो HTTPPasswordMgr के साथ संगत हो; समर्थन करने के लिए आवश्यक इंटरफ़ेस पर जानकारी के लिए अनुभाग HTTPPasswordMgr ऑब्जेक्ट का संदर्भ लें। अगर passwd_mgr भी is_authenticated और update_authenticated तरीके प्रदान करता है ( HTTPPasswordMgrWithPriorAuth ऑब्जेक्ट देखें), तो हैंडलर अनुरोध के साथ प्रमाणीकरण क्रेडेंशियल्स भेजने या न निर्धारित करने के लिए किसी दिए गए URI के लिए is_authenticated परिणाम का उपयोग करेगा। यदि is_authenticated लिए is_authenticated रिटर्न True , तो क्रेडेंशियल भेजे जाते हैं। यदि is_authenticated False , तो क्रेडेंशियल नहीं भेजे जाते हैं, और फिर यदि 401 प्रतिक्रिया प्राप्त होती है, तो प्रमाणीकरण क्रेडेंशियल के साथ अनुरोध फिर से भेजा जाता है। यदि प्रमाणीकरण सफल होता है, तो is_authenticated को यूआरआई के लिए is_authenticated True सेट करने के लिए कहा जाता है, ताकि बाद में URI या इसके किसी भी सुपर-यूआरआई के लिए अनुरोध स्वचालित रूप से प्रमाणीकरण क्रेडेंशियल शामिल होंगे।

संस्करण 3.5 में नया: जोड़ा गया is_authenticated समर्थन।

class urllib.request.HTTPBasicAuthHandler(password_mgr=None)

रिमोट होस्ट के साथ प्रमाणीकरण को संभालें। password_mgr , यदि दिया गया है, तो ऐसा कुछ होना चाहिए जो HTTPPasswordMgr के साथ संगत हो; समर्थन करने के लिए आवश्यक इंटरफ़ेस पर जानकारी के लिए अनुभाग HTTPPasswordMgr ऑब्जेक्ट का संदर्भ लें। HTTPBasicAuthHandler एक गलत ऑथेंटिकेशन स्कीम के साथ प्रस्तुत किए जाने पर एक वैल्यू एड्रैस जुटाएगा।

class urllib.request.ProxyBasicAuthHandler(password_mgr=None)

प्रॉक्सी के साथ प्रमाणीकरण संभालें। password_mgr , यदि दिया गया है, तो ऐसा कुछ होना चाहिए जो HTTPPasswordMgr के साथ संगत हो; समर्थन करने के लिए आवश्यक इंटरफ़ेस पर जानकारी के लिए अनुभाग HTTPPasswordMgr ऑब्जेक्ट का संदर्भ लें।

class urllib.request.AbstractDigestAuthHandler(password_mgr=None)

यह एक मिक्स्ड क्लास है जो HTTP ऑथेंटिकेशन के साथ रिमोट होस्ट और प्रॉक्सी दोनों में मदद करता है। password_mgr , यदि दिया गया है, तो ऐसा कुछ होना चाहिए जो HTTPPasswordMgr के साथ संगत हो; समर्थन करने के लिए आवश्यक इंटरफ़ेस पर जानकारी के लिए अनुभाग HTTPPasswordMgr ऑब्जेक्ट का संदर्भ लें।

class urllib.request.HTTPDigestAuthHandler(password_mgr=None)

रिमोट होस्ट के साथ प्रमाणीकरण को संभालें। password_mgr , यदि दिया गया है, तो ऐसा कुछ होना चाहिए जो HTTPPasswordMgr के साथ संगत हो; समर्थन करने के लिए आवश्यक इंटरफ़ेस पर जानकारी के लिए अनुभाग HTTPPasswordMgr ऑब्जेक्ट का संदर्भ लें। जब डाइजेस्ट ऑथेंटिकेशन हैंडलर और बेसिक ऑथेंटिकेशन हैंडलर दोनों को जोड़ा जाता है, तो डाइजेस्ट ऑथेंटिकेशन को हमेशा सबसे पहले आज़माया जाता है। यदि डाइजेस्ट ऑथेंटिकेशन फिर से 40x प्रतिक्रिया देता है, तो इसे बेसिक ऑथेंटिकेशन हैंडलर को हैंडल भेजा जाता है। यह हैंडलर विधि जब डाइजेस्ट या बेसिक के अलावा किसी प्रमाणीकरण योजना के साथ प्रस्तुत की जाती है, तो ValueError बढ़ा देगी।

संस्करण 3.3 में बदला गया: असमर्थित प्रमाणीकरण योजना पर मूल्य बढ़ाएं।

class urllib.request.ProxyDigestAuthHandler(password_mgr=None)

प्रॉक्सी के साथ प्रमाणीकरण संभालें। password_mgr , यदि दिया गया है, तो ऐसा कुछ होना चाहिए जो HTTPPasswordMgr के साथ संगत हो; समर्थन करने के लिए आवश्यक इंटरफ़ेस पर जानकारी के लिए अनुभाग HTTPPasswordMgr ऑब्जेक्ट का संदर्भ लें।

class urllib.request.HTTPHandler

HTTP URL खोलने के लिए एक क्लास।

class urllib.request.HTTPSHandler(debuglevel=0, context=None, check_hostname=None)

HTTPS URL खोलने के लिए एक क्लास। संदर्भ और check_hostname का वही अर्थ है जो HTTPSConnection

संस्करण 3.2 में परिवर्तित: संदर्भ और check_hostname जोड़े गए थे।

class urllib.request.FileHandler

स्थानीय फ़ाइलें खोलें।

class urllib.request.DataHandler

डेटा URL खोलें।

संस्करण 3.4 में नया।

class urllib.request.FTPHandler

FTP URL खोलें।

class urllib.request.CacheFTPHandler

देरी को कम करने के लिए खुले FTP कनेक्शन का कैश रखते हुए, FTP URL खोलें।

class urllib.request.UnknownHandler

अज्ञात URL को संभालने के लिए एक कैच-ऑल क्लास।

class urllib.request.HTTPErrorProcessor

HTTP त्रुटि प्रतिक्रियाओं की प्रक्रिया करें।

वस्तुओं का अनुरोध करें

निम्नलिखित विधियाँ Request के सार्वजनिक इंटरफ़ेस का वर्णन करती हैं, और इसलिए सभी उपवर्गों में ओवरराइड हो सकती हैं। यह कई सार्वजनिक विशेषताओं को भी परिभाषित करता है जो क्लाइंट द्वारा पार्स किए गए अनुरोध का निरीक्षण करने के लिए उपयोग किया जा सकता है।

Request.full_url

मूल URL कंस्ट्रक्टर के पास गया।

संस्करण 3.4 में बदला गया।

Request.full_url सेटर, गेट्टर और डेलेटर के साथ एक संपत्ति है। यदि यह मौजूद था, तो full_url मूल अनुरोध URL को खंड के साथ लौटाता है।

Request.type

यूआरआई योजना।

Request.host

यूआरआई प्राधिकरण, आमतौर पर एक मेजबान है, लेकिन इसमें एक बृहदान्त्र द्वारा अलग किया गया पोर्ट भी हो सकता है।

Request.origin_req_host

पोर्ट के बिना अनुरोध के लिए मूल होस्ट।

Request.selector

URI पथ। यदि Request प्रॉक्सी का उपयोग करता है, तो चयनकर्ता पूर्ण URL होगा जो प्रॉक्सी को पारित किया जाता है।

Request.data

अनुरोध के लिए निकाय निकाय या निर्दिष्ट नहीं होने पर None नहीं।

संस्करण 3.4 में बदला गया: Request.data का बदलता मूल्य अब "सामग्री-लंबाई" हेडर को हटा देता है यदि यह पहले सेट या गणना की गई थी।

Request.unverifiable

बूलियन, इंगित करता है कि क्या अनुरोध RFC 2965 द्वारा परिभाषित के अनुसार अपरिवर्तनीय है

Request.method

HTTP अनुरोध विधि का उपयोग करने के लिए। डिफ़ॉल्ट रूप से इसका मूल्य None , जिसका अर्थ है कि get_method() इसका उपयोग करने के लिए विधि की सामान्य गणना करेगा। इसका मान सेट किया जा सकता है (इस प्रकार get_method() में डिफ़ॉल्ट संगणना को get_method() करके या तो एक Request उप-वर्ग में कक्षा स्तर पर सेट करके या विधि तर्क के माध्यम से Request निर्माता से एक मान पारित करके डिफ़ॉल्ट मान प्रदान करके) किया जा सकता है।

संस्करण 3.3 में नया।

संस्करण ४.४ में परिवर्तित: एक डिफ़ॉल्ट मान अब उपवर्गों में सेट किया जा सकता है; पहले यह केवल कंस्ट्रक्टर तर्क के माध्यम से सेट किया जा सकता था।

Request.get_method()

HTTP अनुरोध विधि का संकेत देने वाली एक स्ट्रिंग लौटाएँ। यदि method कोई None , तो इसका मान method , अन्यथा Request.data यदि None या 'POST' None है तो 'GET' Request.data । यह केवल HTTP अनुरोधों के लिए सार्थक है।

संस्करण 3.3 में परिवर्तित: get_method अब method के मूल्य को देखता है।

Request.add_header(key, val)

अनुरोध में एक और शीर्ष लेख जोड़ें। हेडर्स को वर्तमान में HTTP हैंडलर्स को छोड़कर सभी हैंडलर द्वारा अनदेखा किया जाता है, जहाँ उन्हें सर्वर पर भेजे गए हेडर की सूची में जोड़ा जाता है। ध्यान दें कि एक ही नाम के साथ एक से अधिक हेडर नहीं हो सकते हैं, और बाद में कॉल प्रमुख टकराव की स्थिति में पिछली कॉल को अधिलेखित कर देंगे। वर्तमान में, यह HTTP कार्यक्षमता का कोई नुकसान नहीं है, क्योंकि सभी हेडर जिसका अर्थ है कि जब एक से अधिक बार उपयोग किया जाता है तो केवल एक हेडर का उपयोग करके समान कार्यक्षमता प्राप्त करने का एक (हेडर-विशिष्ट) तरीका होता है।

Request.add_unredirected_header(key, header)

एक शीर्ष लेख जोड़ें जिसे पुनर्निर्देशित अनुरोध में नहीं जोड़ा जाएगा।

Request.has_header(header)

वापसी करें कि क्या उदाहरण के पास नामित शीर्षलेख है (नियमित और अप्रत्यक्ष दोनों तरह से जांचता है)।

Request.remove_header(header)

अनुरोध शीर्षलेख से नामांकित शीर्ष लेख निकालें (दोनों नियमित और अप्रत्यक्ष हेडर से)।

संस्करण 3.4 में नया।

Request.get_full_url()

कंस्ट्रक्टर में दिए गए URL को वापस करें।

संस्करण 3.4 में बदला गया।

वापसी का full_url

Request.set_proxy(host, type)

प्रॉक्सी सर्वर से कनेक्ट करके अनुरोध तैयार करें। होस्ट और प्रकार इंस्टेंस की जगह ले लेंगे, और इंस्ट्रक्टर में दिए गए इंस्ट्रूमेंट का उदाहरण मूल URL होगा।

Request.get_header(header_name, default=None)

दिए गए हेडर का मान लौटाएं। यदि शीर्ष लेख मौजूद नहीं है, तो डिफ़ॉल्ट मान लौटाएँ।

Request.header_items()

अनुरोध शीर्ष लेखों की टुपल्स (शीर्षलेख_नाम, शीर्षलेख_सूची) की सूची लौटाएं।

संस्करण 3.4 में बदला गया: अनुरोध के तरीके add_data, has_data, get_data, get_type, get_host, get_selector, get_origin_req_host और is_unverifiable जिन्हें 3.3 हटा दिया गया है।

ओपनरडायरेक्टर ऑब्जेक्ट्स

OpenerDirector उदाहरणों में निम्नलिखित विधियाँ हैं:

OpenerDirector.add_handler(handler)

हैंडलर BaseHandler का एक उदाहरण होना चाहिए। निम्न विधियों को खोजा जाता है, और संभव श्रृंखलाओं में जोड़ा जाता है (ध्यान दें कि HTTP त्रुटियां एक विशेष मामला है)।

  • protocol_open() - संकेत है कि हैंडलर जानता है कि प्रोटोकॉल URL कैसे खोलें।
  • http_error_type() - संकेत जो हैंडलर जानता है कि HTTP त्रुटि कोड प्रकार के साथ HTTP त्रुटियों को कैसे संभालना है।
  • protocol_error() - संकेत है कि हैंडलर जानता है कि कैसे (गैर- http ) प्रोटोकॉल से त्रुटियों को संभालना है
  • protocol_request() - संकेत जो हैंडलर जानता है कि प्रोटोकॉल अनुरोधों को पूर्व-प्रक्रिया कैसे करें।
  • protocol_response() - संकेत है कि हैंडलर जानता है कि प्रोटोकॉल प्रतिक्रियाओं को कैसे संसाधित किया जाए।
OpenerDirector.open(url, data=None[, timeout])

दिए गए url को खोलें (जो एक अनुरोध ऑब्जेक्ट या स्ट्रिंग हो सकता है), वैकल्पिक रूप से दिए गए डेटा को पास करना । तर्क, लौटाए गए मान और अपवाद जो urllib.request.urlopen() (जो वर्तमान में स्थापित वैश्विक OpenerDirector पर open() विधि को OpenerDirector )। वैकल्पिक टाइमआउट पैरामीटर कनेक्शन के प्रयास को अवरुद्ध करने के संचालन के लिए सेकंड में एक टाइमआउट निर्दिष्ट करता है (यदि निर्दिष्ट नहीं है, वैश्विक डिफ़ॉल्ट टाइमआउट सेटिंग का उपयोग किया जाएगा)। टाइमआउट सुविधा वास्तव में केवल HTTP, HTTPS और FTP कनेक्शन के लिए काम करती है)।

OpenerDirector.error(proto, *args)

दिए गए प्रोटोकॉल की एक त्रुटि को हैंडल करें। यह दिए गए तर्कों के साथ दिए गए प्रोटोकॉल के लिए पंजीकृत त्रुटि संचालकों को बुलाएगा (जो प्रोटोकॉल विशिष्ट हैं)। HTTP प्रोटोकॉल एक विशेष मामला है जो विशिष्ट त्रुटि हैंडलर को निर्धारित करने के लिए HTTP प्रतिक्रिया कोड का उपयोग करता है; http_error_*() हैंडलर कक्षाओं के तरीकों का संदर्भ लें।

urllib.request.urlopen() गए मान और अपवाद urllib.request.urlopen()

OpenerDirector ऑब्जेक्ट तीन चरणों में URL खोलते हैं:

प्रत्येक चरण के भीतर इन विधियों को जिस क्रम में बुलाया जाता है उसका क्रम हैंडलर उदाहरणों को छाँटकर निर्धारित किया जाता है।

  1. protocol_request() जैसी विधि वाले प्रत्येक हैंडलर में अनुरोध को पूर्व-प्रक्रिया करने के लिए कहा गया है।
  2. रिक्वेस्ट को हैंडल करने के लिए protocol_open() जैसी विधि वाले हैंडलर को बुलाया जाता है। यह चरण तब समाप्त होता है जब एक हैंडलर या तो एक गैर- None मूल्य (यानी एक प्रतिक्रिया) लौटाता है, या एक अपवाद (आमतौर पर URLError ) URLError । अपवादों को प्रचारित करने की अनुमति है।

    वास्तव में, उपरोक्त एल्गोरिथ्म को पहले default_open() नाम के तरीकों के लिए आज़माया जाता है। यदि ऐसी सभी विधियां वापस None आती हैं, तो एल्गोरिथ्म को protocol_open() जैसे तरीकों के लिए दोहराया जाता है। यदि ऐसी सभी विधियाँ वापस None आती हैं, तो एल्गोरिथ्म को unknown_open() नाम के तरीकों के लिए दोहराया जाता है।

    ध्यान दें कि इन विधियों के कार्यान्वयन में मूल OpenerDirector उदाहरण के OpenerDirector.open() और error() विधियों के कॉल शामिल हो सकते हैं।

  3. हर एक हैंडलर जिसका नाम protocol_response() की तरह है, उस विधि को प्रतिक्रिया को पोस्ट-प्रोसेस करने के लिए कहा जाता है।

बेसहैंडलर ऑब्जेक्ट्स

BaseHandler ऑब्जेक्ट्स कुछ तरीके प्रदान करते हैं जो सीधे उपयोगी होते हैं, और अन्य जो व्युत्पन्न वर्गों द्वारा उपयोग किए जाने के लिए होते हैं। ये प्रत्यक्ष उपयोग के लिए अभिप्रेत हैं:

BaseHandler.add_parent(director)

एक निर्देशक को अभिभावक के रूप में जोड़ें।

BaseHandler.close()

किसी भी माता-पिता को हटा दें।

निम्नलिखित विशेषता और विधियों का उपयोग केवल BaseHandler से प्राप्त वर्गों द्वारा किया जाना चाहिए।

ध्यान दें

कन्वेंशन को अपनाया गया है कि protocol_request() request protocol_request() या protocol_response() विधियों को परिभाषित करने वाले उपवर्गों का नाम *Processor ; अन्य सभी का नाम *Handler

BaseHandler.parent

एक वैध OpenerDirector , जिसे एक अलग प्रोटोकॉल का उपयोग करके खोलने या त्रुटियों को संभालने के लिए इस्तेमाल किया जा सकता है।

BaseHandler.default_open(req)

यह विधि BaseHandler में परिभाषित नहीं है, लेकिन उपवर्गों को यह परिभाषित करना चाहिए कि क्या वे सभी URL को पकड़ना चाहते हैं।

यह विधि, यदि लागू की जाती है, तो माता-पिता OpenerDirector द्वारा OpenerDirector । यह OpenerDirector open() या open() के open() के रिटर्न वैल्यू में वर्णित के अनुसार एक फाइल जैसी वस्तु को वापस करना चाहिए। इसे URLError को उठाना चाहिए, जब तक कि वास्तव में कोई असाधारण चीज़ न हो (उदाहरण के लिए, MemoryError को URLError मैप नहीं किया जाना चाहिए)।

इस विधि को किसी भी प्रोटोकॉल-विशिष्ट खुली विधि से पहले बुलाया जाएगा।

BaseHandler.protocol_open(req)

यह विधि BaseHandler में परिभाषित नहीं है, लेकिन उपवर्गों को यह परिभाषित करना चाहिए कि क्या वे दिए गए प्रोटोकॉल के साथ यूआरएल को संभालना चाहते हैं।

यह विधि, यदि परिभाषित की जाती है, तो इसे मूल OpenerDirector द्वारा बुलाया जाएगा। वापसी मान default_open() लिए समान होना चाहिए।

BaseHandler.unknown_open(req)

इस विधि को BaseHandler में परिभाषित नहीं किया गया है, लेकिन उपवर्गों को इसे परिभाषित करना चाहिए अगर वे इसे खोलने के लिए कोई विशिष्ट पंजीकृत हैंडलर वाले सभी URL को पकड़ना चाहते हैं।

यह विधि, यदि लागू की जाती है, तो parent OpenerDirector द्वारा OpenerDirector । वापसी मान default_open() लिए समान होना चाहिए।

BaseHandler.http_error_default(req, fp, code, msg, hdrs)

यह विधि BaseHandler में परिभाषित नहीं है, लेकिन उपवर्गों को इसे ओवरराइड करना चाहिए यदि वे अन्यथा अनचाही HTTP त्रुटियों के लिए कैच-ऑल प्रदान करने का इरादा रखते हैं। इसे OpenerDirector द्वारा त्रुटि प्राप्त होने पर स्वचालित रूप से कहा जाएगा, और सामान्य रूप से अन्य परिस्थितियों में नहीं बुलाया जाना चाहिए।

req एक Request ऑब्जेक्ट होगा, fp HTTP फाइल बॉडी के साथ एक फाइल जैसा ऑब्जेक्ट होगा, कोड तीन अंकों का कोड होगा, संदेश कोड का यूजर- विजुअल स्पष्टीकरण होगा और HDrs एक मैपिंग होगी त्रुटि के हेडर के साथ ऑब्जेक्ट।

लौटाए गए मान और अपवाद urllib.request.urlopen() के समान होने चाहिए।

BaseHandler.http_error_nnn(req, fp, code, msg, hdrs)

nnn तीन अंकों का HTTP त्रुटि कोड होना चाहिए। इस विधि को BaseHandler में भी परिभाषित नहीं किया गया है, लेकिन इसे कॉल किया जाएगा, यदि यह मौजूद है, तो उप-वर्ग के उदाहरण पर, जब कोड nnn के साथ HTTP त्रुटि उत्पन्न होती है।

विशिष्ट HTTP त्रुटियों को संभालने के लिए उपवर्गों को इस विधि को ओवरराइड करना चाहिए।

तर्क, वापसी मूल्य और उठाए गए अपवाद http_error_default() लिए समान होना चाहिए।

BaseHandler.protocol_request(req)

यह विधि BaseHandler में परिभाषित नहीं है, लेकिन उपवर्गों को इसे परिभाषित करना चाहिए यदि वे दिए गए प्रोटोकॉल के अनुरोधों को पूर्व-प्रक्रिया करना चाहते हैं।

यह विधि, यदि परिभाषित की जाती है, तो इसे मूल OpenerDirector द्वारा बुलाया जाएगा। अनुरोध एक Request वस्तु होगी। रिटर्न वैल्यू एक Request ऑब्जेक्ट होना चाहिए।

BaseHandler.protocol_response(req, response)

इस विधि को BaseHandler में परिभाषित नहीं किया गया है, लेकिन उपवर्गों को इसे परिभाषित करना चाहिए यदि वे दिए गए प्रोटोकॉल की प्रतिक्रियाओं को पोस्ट-प्रोसेस करना चाहते हैं।

यह विधि, यदि परिभाषित की जाती है, तो इसे मूल OpenerDirector द्वारा बुलाया जाएगा। अनुरोध एक Request वस्तु होगी। प्रतिक्रिया एक वस्तु होगी जो समान इंटरफ़ेस को लागू करती है जो urllib.request.urlopen() का रिटर्न मान है। वापसी मान को urllib.request.urlopen() के रिटर्न मान के समान इंटरफ़ेस लागू करना चाहिए।

HTTPRedirectHandler ऑब्जेक्ट्स

ध्यान दें

कुछ HTTP पुनर्निर्देशन के लिए इस मॉड्यूल के क्लाइंट कोड से कार्रवाई की आवश्यकता होती है। यदि यह मामला है, तो HTTPError को उठाया जाता है। विभिन्न पुनर्निर्देशन कोड के सटीक अर्थों के विवरण के लिए RFC 2616 देखें।

यदि HTTPError पुनर्निर्देशित URL जो HTTP, HTTPS या FTP URL नहीं है, के साथ प्रस्तुत किया जाता है, तो एक HTTPError अपवाद एक सुरक्षा विचार के रूप में उठाया जाता है।

HTTPRedirectHandler.redirect_request(req, fp, code, msg, hdrs, newurl)

रिडायरेक्ट के जवाब में Request या None । जब सर्वर से पुनर्निर्देशन प्राप्त होता है, तो यह http_error_30*() विधियों के डिफ़ॉल्ट कार्यान्वयन द्वारा कहा जाता है। यदि एक पुनर्निर्देशन होना चाहिए, तो नए Request को http_error_30*() को पुनर्निर्देशित करने की अनुमति देने के लिए एक नया Request वापस करें। अन्यथा, HTTPError यदि किसी अन्य हैंडलर को इस URL को संभालने की कोशिश नहीं करनी चाहिए, या यदि कोई अन्य हैंडलर None कर सकता है तो वापस लौटाएं।

ध्यान दें

इस पद्धति का डिफ़ॉल्ट कार्यान्वयन RFC 2616 का कड़ाई से पालन नहीं करता है, जो कहता है कि उपयोगकर्ता द्वारा पुष्टि किए बिना POST अनुरोधों के 301 और 302 प्रतिक्रियाओं को स्वचालित रूप से पुनर्निर्देशित नहीं किया जाना चाहिए। वास्तव में, ब्राउज़र इन प्रतिक्रियाओं के स्वचालित पुनर्निर्देशन की अनुमति देता है, POST को GET बदल देता है, और डिफ़ॉल्ट कार्यान्वयन इस व्यवहार को पुन: पेश करता है।

HTTPRedirectHandler.http_error_301(req, fp, code, msg, hdrs)

Location: या URI: URL पर पुनर्निर्देशित करें। यह विधि पैरेंट OpenerDirector द्वारा उस समय OpenerDirector जब एचटीटीपी 'स्थायी रूप से स्थानांतरित' हो जाता है।

HTTPRedirectHandler.http_error_302(req, fp, code, msg, hdrs)

http_error_301() समान है, लेकिन 'पाया' प्रतिक्रिया के लिए कहा जाता है।

HTTPRedirectHandler.http_error_303(req, fp, code, msg, hdrs)

http_error_301() समान है, लेकिन 'अन्य देखें' प्रतिक्रिया के लिए कहा जाता है।

HTTPRedirectHandler.http_error_307(req, fp, code, msg, hdrs)

http_error_301() समान, लेकिन 'अस्थायी पुनर्निर्देशन' प्रतिक्रिया के लिए कहा जाता है।

HTTPCookieProcessor उदाहरणों में एक विशेषता है:

HTTPCookieProcessor.cookiejar

http.cookiejar.CookieJar जिसमें कुकीज़ संग्रहीत हैं।

ProxyHandler ऑब्जेक्ट्स

ProxyHandler.protocol_open(request)

ProxyHandler पास हर प्रोटोकॉल के लिए एक मेथड protocol_open() जो कंस्ट्रक्टर में दिए गए प्रॉक्सी शब्दकोश में एक प्रॉक्सी है। विधि request.set_proxy() को कॉल करके प्रॉक्सी के माध्यम से जाने के लिए अनुरोधों को संशोधित करेगी, और श्रृंखला में अगले हैंडलर को वास्तव में प्रोटोकॉल को निष्पादित करने के लिए कॉल करेगी।

HTTPPasswordMgr ऑब्जेक्ट

ये तरीके HTTPPasswordMgr और HTTPPasswordMgrWithDefaultRealm ऑब्जेक्ट पर उपलब्ध हैं।

HTTPPasswordMgr.add_password(realm, uri, user, passwd)

यूआरआई या तो एकल यूआरआई हो सकता है, या यूआरआई का एक अनुक्रम। दायरे , उपयोगकर्ता और पासवार्ड तार होना चाहिए। यह कारण (user, passwd) को प्रमाणीकरण टोकन के रूप में उपयोग किया जाता है, जब दायरे के लिए प्रमाणीकरण और किसी भी यूआरआई के सुपर-यूआरआई को दिया जाता है।

HTTPPasswordMgr.find_user_password(realm, authuri)

दिए गए दायरे और यूआरआई के लिए उपयोगकर्ता / पासवर्ड प्राप्त करें, यदि कोई हो। यह विधि वापस आ जाएगी (None, None) यदि कोई मेल उपयोगकर्ता / पासवर्ड नहीं है।

HTTPPasswordMgrWithDefaultRealm ऑब्जेक्ट्स के लिए, दिए गए दायरे में कोई मिलान वाला उपयोगकर्ता / पासवर्ड None , तो दायरे को None खोजा जाएगा।

HTTPPasswordMgrWithPriorAuth ऑब्जेक्ट्स

यह पासवर्ड मैनेजर, URI को ट्रैक करने के लिए HTTPPasswordMgrWithDefaultRealm का विस्तार करता है, जिसके लिए प्रमाणीकरण क्रेडेंशियल हमेशा भेजे जाने चाहिए।

HTTPPasswordMgrWithPriorAuth.add_password(realm, uri, user, passwd, is_authenticated=False)

realm , uri , user , passwd HTTPPasswordMgr.add_password() is_authenticated दिए गए URI या URI की सूची के लिए is_authenticated ध्वज का प्रारंभिक मान सेट करता है। यदि is_authenticated को True रूप में निर्दिष्ट किया जाता है, तो दायरे को अनदेखा कर दिया जाता है।

HTTPPasswordMgr.find_user_password(realm, authuri)

HTTPPasswordMgrWithDefaultRealm ऑब्जेक्ट्स के लिए भी

HTTPPasswordMgrWithPriorAuth.update_authenticated(self, uri, is_authenticated=False)

यूआरआई या यूआरआई की सूची के लिए is_authenticated झंडा अपडेट करें।

HTTPPasswordMgrWithPriorAuth.is_authenticated(self, authuri)

दिए गए URI के लिए is_authenticated ध्वज की वर्तमान स्थिति देता है।

AbstractBasicAuthHandler ऑब्जेक्ट्स

AbstractBasicAuthHandler.http_error_auth_reqed(authreq, host, req, headers)

उपयोगकर्ता / पासवर्ड जोड़ी प्राप्त करके प्रमाणीकरण अनुरोध को संभालें, और अनुरोध को पुनः प्रयास करें। ऑक्ट्रेक उस हेडर का नाम होना चाहिए जहां रिक्वेस्ट के बारे में जानकारी रिक्वेस्ट में शामिल है, होस्ट URL और इसके लिए ऑथेंटिकेट करने का रास्ता बताता है, रीक होना चाहिए (असफल) Request ऑब्जेक्ट, और हेडर एरर हेडर होने चाहिए।

होस्ट या तो एक प्राधिकरण है (उदाहरण के लिए "python.org" ) या एक URL जिसमें एक प्राधिकरण घटक है (उदाहरण के लिए "http://python.org/" )। किसी भी स्थिति में, प्राधिकरण में एक यूजरइनोफ़ घटक नहीं होना चाहिए (इसलिए, "python.org" और "python.org:80" ठीक हैं, "joe:[email protected]" नहीं है)।

HTTPBasicAuthHandler ऑब्जेक्ट्स

HTTPBasicAuthHandler.http_error_401(req, fp, code, msg, hdrs)

यदि उपलब्ध हो, तो प्रमाणीकरण जानकारी के साथ अनुरोध पुनः प्राप्त करें।

ProxyBasicAuthHandler ऑब्जेक्ट्स

ProxyBasicAuthHandler.http_error_407(req, fp, code, msg, hdrs)

यदि उपलब्ध हो, तो प्रमाणीकरण जानकारी के साथ अनुरोध पुनः प्राप्त करें।

AbstractDigestAuthHandler ऑब्जेक्ट्स

AbstractDigestAuthHandler.http_error_auth_reqed(authreq, host, req, headers)

ऑक्ट्रेक उस हेडर का नाम होना चाहिए जहां रिक्वेस्ट की जानकारी रिक्वेस्ट में शामिल है, होस्ट को ऑथेंटिकेट करने के लिए होस्ट होना चाहिए, रीक होना चाहिए (फेल) Request ऑब्जेक्ट होना चाहिए और हेडर एरर हेडर होना चाहिए।

HTTPDigestAuthHandler ऑब्जेक्ट्स

HTTPDigestAuthHandler.http_error_401(req, fp, code, msg, hdrs)

यदि उपलब्ध हो, तो प्रमाणीकरण जानकारी के साथ अनुरोध पुनः प्राप्त करें।

ProxyDigestAuthHandler ऑब्जेक्ट्स

ProxyDigestAuthHandler.http_error_407(req, fp, code, msg, hdrs)

यदि उपलब्ध हो, तो प्रमाणीकरण जानकारी के साथ अनुरोध पुनः प्राप्त करें।

HTTPHandler ऑब्जेक्ट

HTTPHandler.http_open(req)

एक HTTP अनुरोध भेजें, जो कि req.has_data() आधार पर GET या POST हो सकता है।

HTTPSHandler ऑब्जेक्ट्स

HTTPSHandler.https_open(req)

HTTPS अनुरोध भेजें, जो कि GET या POST हो सकता है, जो कि req.has_data() पर निर्भर करता है।

FileHandler ऑब्जेक्ट्स

FileHandler.file_open(req)

फ़ाइल को स्थानीय रूप से खोलें, यदि कोई होस्ट नाम नहीं है, या होस्ट का नाम 'localhost'

संस्करण 3.2 में परिवर्तित: यह विधि केवल स्थानीय होस्टनाम के लिए लागू है। जब एक दूरस्थ होस्टनाम दिया जाता है, तो URLError उठाया जाता है।

डेटाहैंडलर ऑब्जेक्ट्स

DataHandler.data_open(req)

एक डेटा URL पढ़ें। इस तरह के URL में URL में ही इनकोड की गई सामग्री होती है। डेटा URL सिंटैक्स RFC 2397 में निर्दिष्ट है। यह कार्यान्वयन बेस 64 एनकोडेड डेटा URL में सफेद रिक्त स्थान को अनदेखा करता है, इसलिए URL जो भी स्रोत फ़ाइल से आता है, उसमें लपेटा जा सकता है। लेकिन भले ही कुछ ब्राउज़र बेस 64 एन्कोडेड डेटा URL के अंत में एक गुम पैडिंग के बारे में बुरा न मानें, लेकिन यह कार्यान्वयन ValueError उस स्थिति में बढ़ाएगा ।

एफ़टीपीहैंडलर ऑब्जेक्ट्स

FTPHandler.ftp_open(req)

एफ़टीपी ने संकेत दिया फ़ाइल को खोलने अनुरोध । लॉगिन हमेशा खाली उपयोगकर्ता नाम और पासवर्ड के साथ किया जाता है।

CacheFTPHandler ऑब्जेक्ट्स

CacheFTPHandler ऑब्जेक्ट FTPHandler निम्न अतिरिक्त विधियों के साथ ऑब्जेक्ट हैं :

CacheFTPHandler.setTimeout(t)

टी सेकंड के लिए कनेक्शन का टाइमआउट सेट करें ।

CacheFTPHandler.setMaxConns(m)

कैश्ड कनेक्शन की अधिकतम संख्या मी पर सेट करें ।

अज्ञातहैंडलर ऑब्जेक्ट्स

UnknownHandler.unknown_open()

एक URLError अपवाद उठाएं ।

HTTPErrorProcessor ऑब्जेक्ट्स

HTTPErrorProcessor.http_response(request, response)

HTTP त्रुटि प्रतिक्रियाओं की प्रक्रिया करें।

200 त्रुटि कोड के लिए, प्रतिक्रिया वस्तु तुरंत वापस आ जाती है।

गैर-200 त्रुटि कोड के लिए, यह केवल protocol_error_code() हैंडलर विधियों पर, के माध्यम से काम करता है error() । आखिरकार, अगर कोई अन्य हैंडलर त्रुटि को संभालता है, तो HTTPDefaultErrorHandler बढ़ाएगा HTTPError

HTTPErrorProcessor.https_response(request, response)

HTTPS त्रुटि प्रतिक्रियाओं को संसाधित करें।

व्यवहार वैसा ही है http_response()

उदाहरण

नीचे दिए गए उदाहरणों के अलावा, अधिक उदाहरण HOWTO Fetch Internet Resources में urllib Package का उपयोग करके दिए गए हैं ।

इस उदाहरण को python.org मुख्य पृष्ठ मिलता है और इसके पहले 300 बाइट प्रदर्शित करता है।

>>> import urllib.request
>>> with urllib.request.urlopen('http://www.python.org/') as f:
...     print(f.read(300))
...
b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n\n\n<html
xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n\n<head>\n
<meta http-equiv="content-type" content="text/html; charset=utf-8" />\n
<title>Python Programming '

ध्यान दें कि urlopen एक बाइट ऑब्जेक्ट देता है। इसका कारण यह है कि HTTP सर्वर से प्राप्त बाइट स्ट्रीम के एन्कोडिंग को स्वचालित रूप से निर्धारित करने के लिए युरोपेन के लिए कोई रास्ता नहीं है। सामान्य तौर पर, एक प्रोग्राम स्ट्रिंग को लौटाए गए बाइट्स ऑब्जेक्ट को डिकोड कर देगा, एक बार यह निर्धारित करता है या उपयुक्त एन्कोडिंग का अनुमान लगाता है।

निम्नलिखित W3C दस्तावेज़, https://www.w3.org/International/O-charset , उन विभिन्न तरीकों को सूचीबद्ध करता है जिनमें एक (X) HTML या XML दस्तावेज़ इसकी एन्कोडिंग जानकारी निर्दिष्ट कर सकता था।

जैसा कि python.org वेबसाइट अपने मेटा टैग में निर्दिष्ट utf-8 एन्कोडिंग का उपयोग करती है, हम बाइट ऑब्जेक्ट को डिकोड करने के लिए उसी का उपयोग करेंगे।

>>> with urllib.request.urlopen('http://www.python.org/') as f:
...     print(f.read(100).decode('utf-8'))
...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtm

संदर्भ प्रबंधक दृष्टिकोण का उपयोग किए बिना एक ही परिणाम प्राप्त करना भी संभव है ।

>>> import urllib.request
>>> f = urllib.request.urlopen('http://www.python.org/')
>>> print(f.read(100).decode('utf-8'))
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtm

निम्नलिखित उदाहरण में, हम एक सीजीआई के स्टड के लिए एक डेटा-स्ट्रीम भेज रहे हैं और उस डेटा को पढ़ रहे हैं जो हमारे पास लौटता है। ध्यान दें कि यह उदाहरण केवल तभी काम करेगा जब पायथन इंस्टॉलेशन SSL का समर्थन करता है।

>>> import urllib.request
>>> req = urllib.request.Request(url='https://localhost/cgi-bin/test.cgi',
...                       data=b'This data is passed to stdin of the CGI')
>>> with urllib.request.urlopen(req) as f:
...     print(f.read().decode('utf-8'))
...
Got Data: "This data is passed to stdin of the CGI"

उपरोक्त उदाहरण में उपयोग किए गए नमूना CGI के लिए कोड है:

#!/usr/bin/env python
import sys
data = sys.stdin.read()
print('Content-type: text/plain\n\nGot Data: "%s"' % data)

यहाँ एक PUT अनुरोध का उपयोग करके एक उदाहरण दिया गया है Request :

import urllib.request
DATA = b'some data'
req = urllib.request.Request(url='http://localhost:8080', data=DATA,method='PUT')
with urllib.request.urlopen(req) as f:
    pass
print(f.status)
print(f.reason)

मूल HTTP प्रमाणीकरण का उपयोग:

import urllib.request
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
                          uri='https://mahler:8092/site-updates.py',
                          user='klem',
                          passwd='kadidd!ehopper')
opener = urllib.request.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib.request.install_opener(opener)
urllib.request.urlopen('http://www.example.com/login.html')

build_opener() डिफ़ॉल्ट रूप से कई हैंडलर प्रदान करता है, जिसमें ए ProxyHandler । डिफ़ॉल्ट रूप से, ProxyHandler पर्यावरण चर नाम का उपयोग करता है <scheme>_proxy , जहां <scheme> URL योजना शामिल है। उदाहरण के लिए, http_proxy HTTP प्रॉक्सी का URL प्राप्त करने के लिए पर्यावरण चर को पढ़ा जाता है।

यह उदाहरण ProxyHandler प्रोग्राम के साथ डिफ़ॉल्ट रूप से प्रदत्त प्रॉक्सी URL का उपयोग करता है, और इसके साथ प्रॉक्सी प्राधिकरण समर्थन जोड़ता है ProxyBasicAuthHandler

proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'})
proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')

opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)
# This time, rather than install the OpenerDirector, we use it directly:
opener.open('http://www.example.com/login.html')

HTTP शीर्ष लेख जोड़ना:

कंस्ट्रक्टर को हेडर्स तर्क का उपयोग करें Request , या:

import urllib.request
req = urllib.request.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
# Customize the default User-Agent header value:
req.add_header('User-Agent', 'urllib-example/0.1 (Contact: . . .)')
r = urllib.request.urlopen(req)

OpenerDirector स्वचालित रूप से प्रत्येक में एक उपयोगकर्ता-एजेंट हेडर जोड़ता है Request । इसे बदलने के लिए:

import urllib.request
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('http://www.example.com/')

यह भी याद रखें कि जब (या ) पास किया जाता है तो कुछ मानक हेडर ( सामग्री-लंबाई , सामग्री-प्रकार और होस्ट ) जोड़े जाते हैं । Request urllib.request.urlopen() OpenerDirector.open()

यहाँ एक उदाहरण सत्र है जो GET किसी पैरामीटर वाले URL को पुनः प्राप्त करने के लिए विधि का उपयोग करता है :

>>> import urllib.request
>>> import urllib.parse
>>> params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> url = "http://www.musi-cal.com/cgi-bin/query?%s" % params
>>> with urllib.request.urlopen(url) as f:
...     print(f.read().decode('utf-8'))
...

इसके POST बजाय निम्न उदाहरण विधि का उपयोग करता है । ध्यान दें कि डेटा के रूप में urlopen में भेजे जाने से पहले urlencode से params आउटपुट बाइट्स के लिए एन्कोडेड है:

>>> import urllib.request
>>> import urllib.parse
>>> data = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> data = data.encode('ascii')
>>> with urllib.request.urlopen("http://requestb.in/xrbl82xr", data) as f:
...     print(f.read().decode('utf-8'))
...

निम्न उदाहरण स्पष्ट रूप से निर्दिष्ट HTTP प्रॉक्सी का उपयोग करता है, पर्यावरण सेटिंग्स को ओवरराइड करता है:

>>> import urllib.request
>>> proxies = {'http': 'http://proxy.example.com:8080/'}
>>> opener = urllib.request.FancyURLopener(proxies)
>>> with opener.open("http://www.python.org") as f:
...     f.read().decode('utf-8')
...

निम्नलिखित उदाहरण पर्यावरण सेटिंग्स को ओवरराइड करते हुए, किसी भी समीपता का उपयोग नहीं करता है:

>>> import urllib.request
>>> opener = urllib.request.FancyURLopener({})
>>> with opener.open("http://www.python.org/") as f:
...     f.read().decode('utf-8')
...

विरासत इंटरफ़ेस

निम्नलिखित कार्यों और कक्षाओं को पायथन 2 मॉड्यूल urllib (जैसा कि विरोध किया गया है urllib2 ) से पोर्ट किया गया है । वे भविष्य में किसी बिंदु पर पदावनत हो सकते हैं।

urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

URL द्वारा स्थानीय फ़ाइल में निरूपित नेटवर्क ऑब्जेक्ट की प्रतिलिपि बनाएँ। यदि URL किसी स्थानीय फ़ाइल की ओर इशारा करता है, तो फ़ाइल कॉपी किए जाने तक ऑब्जेक्ट की प्रतिलिपि नहीं बनाई जाएगी। एक टपल लौटें (filename, headers) जहां फ़ाइल नाम स्थानीय फ़ाइल नाम है जिसके तहत वस्तु पाया जा सकता है, और हेडर है जो कुछ भी info() वस्तु द्वारा वापस की विधि urllib.request.urlopen() (एक दूरस्थ वस्तु के लिए) लौट आए। अपवाद समान हैं urllib.request.urlopen()

दूसरा तर्क, यदि मौजूद है, तो फ़ाइल स्थान को कॉपी करने के लिए निर्दिष्ट करता है (यदि अनुपस्थित है, तो स्थान एक उत्पन्न नाम के साथ एक अस्थायी होगा)। तीसरा तर्क, यदि मौजूद है, तो एक कॉल करने योग्य है जिसे नेटवर्क कनेक्शन की स्थापना पर एक बार और उसके बाद प्रत्येक ब्लॉक को पढ़ने के बाद कहा जाएगा। कॉल करने योग्य तीन तर्क पारित किए जाएंगे; अब तक हस्तांतरित ब्लॉकों की एक गिनती, बाइट्स में एक ब्लॉक आकार और फ़ाइल का कुल आकार। तीसरा तर्क -1 पुराने एफ़टीपी सर्वर पर हो सकता है जो एक रिट्रीवल अनुरोध के जवाब में फ़ाइल का आकार नहीं लौटाते हैं।

निम्न उदाहरण सबसे सामान्य उपयोग परिदृश्य दिखाता है:

>>> import urllib.request
>>> local_filename, headers = urllib.request.urlretrieve('http://python.org/')
>>> html = open(local_filename)
>>> html.close()

यदि url http: योजना पहचानकर्ता का उपयोग करता है , तो अनुरोध निर्दिष्ट करने के लिए वैकल्पिक डेटा तर्क दिया जा सकता है POST (सामान्यतः अनुरोध प्रकार है GET )। डेटा तर्क मानक में एक बाइट ऑब्जेक्ट होना चाहिए आवेदन / x-www फार्म-urlencoded प्रारूप; urllib.parse.urlencode() फ़ंक्शन देखें ।

urlretrieve() उठाएगा ContentTooShortError जब यह पता लगाएगा कि उपलब्ध डेटा की मात्रा अपेक्षित राशि से कम थी (जो कि सामग्री-लंबाई हेडर द्वारा रिपोर्ट की गई आकार है )। यह तब हो सकता है, उदाहरण के लिए, जब डाउनलोड बाधित हो।

सामग्री-लंबाई कम बाध्य के रूप में व्यवहार किया जाता है: वहाँ पढ़ने के लिए और अधिक डेटा नहीं है, तो urlretrieve अधिक डेटा पढ़ता है, लेकिन अगर कम डेटा उपलब्ध है, यह अपवाद को जन्म देती है।

आप इस मामले में डाउनलोड किए गए डेटा को अभी भी प्राप्त कर सकते हैं, यह content अपवाद उदाहरण की विशेषता में संग्रहीत है ।

यदि कोई सामग्री-लंबाई हेडर की आपूर्ति नहीं की गई थी, तो urlretrieve उस डेटा के आकार की जांच नहीं कर सकता है जिसे उसने डाउनलोड किया है, और बस इसे वापस करता है। इस मामले में आपको बस यह मान लेना है कि डाउनलोड सफल रहा।

urllib.request.urlcleanup()

उन अस्थायी फ़ाइलों को साफ़ करता है जिन्हें पिछली कॉल के द्वारा पीछे छोड़ दिया गया हो सकता है urlretrieve()

class urllib.request.URLopener(proxies=None, **x509)

संस्करण 3.3 के बाद से पदावनत।

URL खोलने और पढ़ने के लिए बेस क्लास। जब तक आप के अलावा अन्य योजनाओं का उपयोग कर उद्घाटन वस्तुओं का समर्थन करने की जरूरत है http: , ftp: या file: , तो आप शायद का उपयोग करना चाहते FancyURLopener

डिफ़ॉल्ट रूप से, URLopener वर्ग एक के लिए भेजता है उपयोगकर्ता-एजेंट के शीर्षक urllib/VVV है, जहां VVV है urllib संस्करण संख्या। अनुप्रयोग उप-वर्ग परिभाषा में एक उपयुक्त स्ट्रिंग मान के लिए उपवर्ग या वर्ग विशेषता सेट करके अपने स्वयं के उपयोगकर्ता-एजेंट हेडर को परिभाषित कर सकते हैं । URLopener FancyURLopener version

वैकल्पिक परदे के पीछे पैरामीटर प्रॉक्सी यूआरएल के लिए एक शब्दकोश मानचित्रण योजना नाम होना चाहिए, जहां एक खाली शब्दकोश प्रॉक्सी को पूरी तरह से बंद कर देता है। इसका डिफ़ॉल्ट मान है None , जिस स्थिति में पर्यावरण प्रॉक्सी सेटिंग्स का उपयोग किया जाएगा यदि वर्तमान में urllib.request.urlopen() , ऊपर की परिभाषा में चर्चा की गई है ।

अतिरिक्त कीवर्ड पैरामीटर, x509 में एकत्रित , https: योजना का उपयोग करते समय क्लाइंट के प्रमाणीकरण के लिए उपयोग किया जा सकता है । SSL कुंजी और प्रमाणपत्र प्रदान करने के लिए Key_file और cert_file कीवर्ड का समर्थन किया जाता है; क्लाइंट प्रमाणीकरण का समर्थन करने के लिए दोनों आवश्यक हैं।

URLopener OSError यदि सर्वर एक त्रुटि कोड देता है, तो ऑब्जेक्ट एक अपवाद बढ़ाएगा ।

open(fullurl, data=None)

उचित प्रोटोकॉल का उपयोग करके पूर्ण खोलें । यह विधि कैश और प्रॉक्सी जानकारी सेट करती है, फिर इसके इनपुट तर्कों के साथ उपयुक्त ओपन विधि को कॉल करती है। यदि योजना मान्यता प्राप्त नहीं है, open_unknown() तो कहा जाता है। डेटा तर्क के रूप में एक ही अर्थ है डेटा का तर्क urllib.request.urlopen()

open_unknown(fullurl, data=None)

अज्ञात URL प्रकारों को खोलने के लिए अतिदेय इंटरफ़ेस।

retrieve(url, filename=None, reporthook=None, data=None)

Url की सामग्री को पुनः प्राप्त करता है और इसे फ़ाइल नाम में रखता है । वापसी मूल्य एक स्थानीय फ़ाइल नाम से email.message.Message युक्त एक टपल है और या तो प्रतिक्रिया हेडर (दूरस्थ URL के लिए) या None (स्थानीय URL के लिए ) युक्त ऑब्जेक्ट है । कॉलर को तब फ़ाइल नाम की सामग्री को खोलना और पढ़ना होगा । यदि फ़ाइल नाम नहीं दिया गया है और URL स्थानीय फ़ाइल को संदर्भित करता है, तो इनपुट फ़ाइल नाम वापस आ जाता है। यदि URL गैर-स्थानीय है और फ़ाइल नाम नहीं दिया गया है, तो फ़ाइलनाम tempfile.mktemp() एक प्रत्यय के साथ आउटपुट होता है जो इनपुट URL के अंतिम पथ घटक के प्रत्यय से मेल खाता है। अगर पछताओगे यह दिया गया है, यह तीन संख्यात्मक मापदंडों को स्वीकार करने वाला एक फ़ंक्शन होना चाहिए: एक चंक संख्या, अधिकतम आकार के विखंडू में पढ़ा जाता है और डाउनलोड के कुल आकार (-1 यदि अज्ञात)। इसे शुरू में एक बार कॉल किया जाएगा और नेटवर्क से प्रत्येक डेटा को पढ़ने के बाद। स्थानीय URL के लिए पुनर्खरीद को अनदेखा किया जाता है।

यदि url http: योजना पहचानकर्ता का उपयोग करता है , तो अनुरोध निर्दिष्ट करने के लिए वैकल्पिक डेटा तर्क दिया जा सकता है POST (सामान्यतः अनुरोध प्रकार है GET )। डेटा तर्क मानक में करना होगा आवेदन / x-www फार्म-urlencoded प्रारूप; urllib.parse.urlencode() फ़ंक्शन देखें ।

version

वैरिएबल जो ओपनर ऑब्जेक्ट के उपयोगकर्ता एजेंट को निर्दिष्ट करता है। प्राप्त करने के लिए urllib आधार निर्माता कॉल करने से पहले सर्वर यह एक विशेष उपयोगकर्ता एजेंट है कि एक वर्ग चर के रूप में एक उपवर्ग में या निर्माता में इस सेट को बताने के लिए।

class urllib.request.FancyURLopener(...)

संस्करण 3.3 के बाद से पदावनत।

FancyURLopener URLopener निम्नलिखित HTTP प्रतिक्रिया कोड के लिए डिफ़ॉल्ट हैंडलिंग प्रदान करने वाले उपवर्ग : 301, 302, 303, 307 और 401। ऊपर सूचीबद्ध 30x प्रतिक्रिया कोड के लिए, स्थान शीर्षक का उपयोग वास्तविक URL प्राप्त करने के लिए किया जाता है। 401 प्रतिक्रिया कोड (प्रमाणीकरण आवश्यक) के लिए, बुनियादी HTTP प्रमाणीकरण किया जाता है। 30x प्रतिक्रिया कोड के लिए, पुनरावृत्ति को अधिकतम गुण विशेषता के मूल्य से विभाजित किया जाता है, जो 10 तक चूक करता है।

अन्य सभी प्रतिक्रिया कोडों के लिए, विधि http_error_default() को कहा जाता है जिसे आप उपवर्गों में उचित रूप से त्रुटि को संभालने के लिए ओवरराइड कर सकते हैं।

ध्यान दें

RFC 2616 के पत्र के अनुसार , POST अनुरोधों की 301 और 302 प्रतिक्रियाओं को उपयोगकर्ता द्वारा पुष्टि के बिना स्वचालित रूप से पुनर्निर्देशित नहीं किया जाना चाहिए। वास्तव में, ब्राउज़र इन प्रतिक्रियाओं के स्वचालित पुनर्निर्देशन की अनुमति देता है, POST को GET में बदल देता है, और urllib इस व्यवहार को पुन: पेश करता है।

कंस्ट्रक्टर के पैरामीटर उन के लिए समान हैं URLopener

ध्यान दें

बुनियादी प्रमाणीकरण करते समय, एक FancyURLopener उदाहरण इसकी prompt_user_passwd() विधि कहता है । डिफ़ॉल्ट कार्यान्वयन नियंत्रण टर्मिनल पर आवश्यक जानकारी के लिए उपयोगकर्ताओं से पूछता है। यदि आवश्यक हो तो अधिक उपयुक्त व्यवहार का समर्थन करने के लिए एक उपवर्ग इस पद्धति को ओवरराइड कर सकता है।

FancyURLopener वर्ग एक अतिरिक्त विधि कि उचित व्यवहार प्रदान करने के लिए अतिभारित किया जाना चाहिए प्रदान करता है:

prompt_user_passwd(host, realm)

निर्दिष्ट सुरक्षा क्षेत्र में दिए गए होस्ट पर उपयोगकर्ता को प्रमाणित करने के लिए आवश्यक जानकारी लौटाएं। वापसी मूल्य एक टपल होना चाहिए (user, password) , जिसका उपयोग मूल प्रमाणीकरण के लिए किया जा सकता है।

कार्यान्वयन टर्मिनल पर इस जानकारी के लिए संकेत देता है; एक अनुप्रयोग को स्थानीय वातावरण में एक उपयुक्त इंटरैक्शन मॉडल का उपयोग करने के लिए इस पद्धति को ओवरराइड करना चाहिए।

urllib.request प्रतिबंध

  • वर्तमान में, केवल निम्नलिखित प्रोटोकॉल समर्थित हैं: HTTP (संस्करण 0.9 और 1.0), एफ़टीपी, स्थानीय फाइलें और डेटा URL।

    संस्करण 3.4 में परिवर्तित: डेटा URL के लिए अतिरिक्त समर्थन।

  • urlretrieve() जब तक किसी को समाप्ति समय हेडर के उचित प्रसंस्करण को हैक करने का समय नहीं मिल जाता है तब तक कैशिंग सुविधा को अक्षम कर दिया गया है।
  • क्वेरी करने के लिए एक फ़ंक्शन होना चाहिए कि क्या कोई विशेष URL कैश में है।
  • पिछड़ी संगतता के लिए, यदि कोई URL किसी स्थानीय फ़ाइल को इंगित करता है, लेकिन फ़ाइल को नहीं खोला जा सकता है, तो URL को FTP प्रोटोकॉल का उपयोग करके पुन: व्याख्या किया जाता है। यह कभी-कभी भ्रामक त्रुटि संदेशों का कारण बन सकता है।
  • urllib.request.urlopen() और urlretrieve() करते समय कोई नेटवर्क कनेक्शन के लिए प्रतीक्षारत स्थापित होने कार्यों मनमाने ढंग से देर लग सकती है। इसका मतलब है कि थ्रेड्स का उपयोग किए बिना इन कार्यों का उपयोग करके एक इंटरैक्टिव वेब क्लाइंट बनाना मुश्किल है।
  • सर्वर द्वारा लौटाया गया urllib.request.urlopen() या urlretrieve() डेटा कच्चा डेटा है। यह बाइनरी डेटा (जैसे छवि), सादा पाठ या (उदाहरण के लिए) HTML हो सकता है। HTTP प्रोटोकॉल उत्तर हेडर में टाइप जानकारी प्रदान करता है, जिसका निरीक्षण कंटेंट-टाइप हेडर को देखकर किया जा सकता है । यदि लौटा डेटा HTML है, तो आप html.parser इसे पार्स करने के लिए मॉड्यूल का उपयोग कर सकते हैं ।
  • एफ़टीपी प्रोटोकॉल को संभालने वाला कोड किसी फ़ाइल और डायरेक्टरी के बीच अंतर नहीं कर सकता है। यह एक URL को पढ़ने का प्रयास करते समय अनपेक्षित व्यवहार को जन्म दे सकता है जो एक फ़ाइल की ओर इशारा करता है जो सुलभ नहीं है। यदि URL एक में समाप्त होता है / , तो यह एक निर्देशिका को संदर्भित करने के लिए माना जाता है और तदनुसार संभाला जाएगा। लेकिन अगर किसी फ़ाइल को पढ़ने का प्रयास 550 त्रुटि की ओर जाता है (जिसका अर्थ है कि URL नहीं मिल सकता है या पहुंच योग्य नहीं है, अक्सर अनुमति कारणों से), तो मामले को निर्देशिका के रूप में एक निर्देशिका के रूप में निर्दिष्ट करने के लिए संभाल लिया जाता है एक URL द्वारा लेकिन अनुगामी / छोड़ दिया गया है। यह भ्रामक परिणाम पैदा कर सकता है जब आप एक फ़ाइल लाने की कोशिश करते हैं जिसकी रीड अनुमतियाँ इसे दुर्गम बनाती हैं; एफ़टीपी कोड इसे पढ़ने की कोशिश करेगा, 550 त्रुटि के साथ विफल हो जाएगा, और फिर अपठनीय फ़ाइल के लिए एक निर्देशिका लिस्टिंग का प्रदर्शन करेगा। यदि ठीक-ठीक नियंत्रण की आवश्यकता है, तो अपनी आवश्यकताओं को पूरा करने के लिए ftplib मॉड्यूल, सबक्लासिंग FancyURLopener , या _urlopener को बदलने पर विचार करें।

urllib.response - प्रतिक्रिया वर्ग जिसका उपयोग urllib द्वारा किया जाता है

urllib.response मॉड्यूल कार्यों और वर्ग है जो इंटरफेस, सहित की तरह एक न्यूनतम फ़ाइल को परिभाषित को परिभाषित करता है read() और readline() । सामान्य प्रतिक्रिया वस्तु एक एडिनफॉरल उदाहरण है, जो एक info() विधि को परिभाषित करता है और जो हेडर और एक geturl() विधि है जो url को लौटाता है। इस मॉड्यूल द्वारा परिभाषित कार्य आंतरिक रूप से urllib.request मॉड्यूल द्वारा उपयोग किए जाते हैं ।

Original text