2012-08-01 12 views
12

मैं एक वेबसाइट (मैं एक कंपनी की प्रॉक्सी के पीछे कर रहा हूँ) urllib.request.urlopen का उपयोग कर() खोलने की कोशिश कर रहा हूँ, लेकिन मैं त्रुटि हो रही है:अजगर 3 - urllib, HTTP त्रुटि 407: प्रॉक्सी प्रमाणीकरण आवश्यक

urllib.error.HTTPError: HTTP Error 407: Proxy Authentication Required 

मैं urllib.request.getproxies() में प्रॉक्सी पा सकता हूं, लेकिन इसके लिए उपयोग करने के लिए मैं उपयोगकर्ता नाम और पासवर्ड कैसे निर्दिष्ट करूं? मुझे आधिकारिक दस्तावेज़ों में समाधान नहीं मिला।

+0

आप http://stackoverflow.com/questions/34079/how-to-specify-an-authenticated-proxy-for-a-python-http-connection को देखा है? Http://docs.python.org/library/urllib2.html#urllib2-examples के नीचे के उदाहरण। – katrielalex

+0

हाँ, लेकिन यह Python2.7 के लिए है क्या उन्होंने Python3 3 में पूरे urllib पैकेज को पुन: स्थापित नहीं किया? – Lanaru

+1

उन्होंने मूल रूप से इंटरफ़ेस को नहीं बदला - बस कुछ चीजों को स्थानांतरित कर दिया। 'प्रॉक्सी हैंडलर' अब ['urllib.request.ProxyHandler'] में रहता है (http://docs.python.org/release/3.0.1/library/urllib.request.html#urllib.request.ProxyHandler) – katrielalex

उत्तर

21
import urllib.request as req 

proxy = req.ProxyHandler({'http': r'http://username:[email protected]:port'}) 
auth = req.HTTPBasicAuthHandler() 
opener = req.build_opener(proxy, auth, req.HTTPHandler) 
req.install_opener(opener) 
conn = req.urlopen('http://google.com') 
return_str = conn.read() 
+3

धन्यवाद। क्या उपयोगकर्ता नाम और पासवर्ड की आपूर्ति किए बिना ऐसा करने का कोई तरीका नहीं है? –

+3

यदि आप अपने स्रोत कोड में हार्ड-कोड किए गए क्रेडेंशियल्स (और इस प्रकार गिट या अन्य वीसीएस कलाकृतियों में लीक करने) के बारे में चिंतित हैं, तो सबसे अच्छा तरीका कॉन्फ़िगर करने के लिए कॉन्फ़िगरर्स, या वाईएएमएल या जेएसओएन जैसे कुछ का उपयोग करना है। अपने स्वयं के अलग फ़ाइल में प्रमाण पत्र। कॉन्फ़िगरेशन सेटिंग्स से गतिशील रूप से प्रॉक्सी हैंडलर यूआरएल बनाएं। यह प्रमाण-पत्र गोपनीय रखने के दौरान आपके स्रोतों को पठनीय करने की अनुमति देता है। –

+1

एक मामूली नोट: मेरे लिए, जहां उसके पास "@ url: port" है, मैंने वास्तव में मशीन नाम "@machine: port" का उपयोग किया, पूर्ण यूआरएल नहीं। – mcherm

संबंधित मुद्दे