2010-05-28 20 views
9

यह ठीक काम: अगर https http परिवर्तन कोपायथन urllib2> HTTP प्रॉक्सी> HTTPS अनुरोध

import urllib2 

opener = urllib2.build_opener(
       urllib2.HTTPHandler(), 
       urllib2.HTTPSHandler(), 
       urllib2.ProxyHandler({'http': 'http://user:[email protected]:3128'})) 
urllib2.install_opener(opener) 
print urllib2.urlopen('http://www.google.com').read() 

लेकिन,:

त्रुटियों
... 
print urllib2.urlopen('https://www.google.com').read() 

हैं:

Traceback (most recent call last): 
    File "D:\Temp\6\tmp.py", line 13, in <module> 
    print urllib2.urlopen('https://www.google.com').read() 
    File "C:\Python26\lib\urllib2.py", line 124, in urlopen 
    return _opener.open(url, data, timeout) 
    File "C:\Python26\lib\urllib2.py", line 389, in open 
    response = self._open(req, data) 
    File "C:\Python26\lib\urllib2.py", line 407, in _open 
    '_open', req) 
    File "C:\Python26\lib\urllib2.py", line 367, in _call_chain 
    result = func(*args) 
    File "C:\Python26\lib\urllib2.py", line 1154, in https_open 
    return self.do_open(httplib.HTTPSConnection, req) 
    File "C:\Python26\lib\urllib2.py", line 1121, in do_open 
    raise URLError(err) 
URLError: <urlopen error [Errno 10060] 

इस समस्या का समाधान और समाधान कैसे करें?

+3

अगर आप यह पढ़ रहे हैं: यहाँ ((पिछले अद्यतन देखें) PATCH पहली बार स्थापित करने के लिए न भूलें) HTTPS HTTP प्रॉक्सी से अधिक मूल प्रमाणीकरण के साथ संसाधनों क्वेरी करने के लिए कोड है: कृपया सही उत्तर को सही के रूप में चिह्नित करें। यह सुनिश्चित करना है कि कोई भी पहले से ही उत्तर दिए गए प्रश्न का उत्तर देने का प्रयास करने में अपना समय बर्बाद नहीं करेगा। यह आपकी समस्या के समाधान के साथ आने वाले व्यक्ति को धन्यवाद देने का एक अच्छा तरीका भी है – Sheena

उत्तर

1

विंडोज़ पर, त्रुटि 10060 एक विंसॉक त्रुटि है जिसका मतलब कनेक्शन का समय समाप्त हो गया है। क्या आप https://www.google.com तक एक ही मशीन से प्रॉक्सी सेट के साथ http://user:[email protected]:3128 पर एक ही ब्राउज़र से पहुंचने में सक्षम हैं? क्या आप सुनिश्चित हैं कि आपका प्रॉक्सी सर्वर उसी पोर्ट पर https और http दोनों को संभाल सकता है?

16

बदलें इस लाइन:

urllib2.ProxyHandler({'http': 'http://user:[email protected]:3128'})) 
इस के लिए

:

urllib2.ProxyHandler({'https': 'http://user:[email protected]:3128'})) 

यह मेरे लिए ठीक काम करता है।

+0

हां, यह सही समाधान – fijiaaron

+0

urllib2 है। प्रॉक्सी हैडलर ({'https': 'https: // उपयोगकर्ता: पास @ प्रॉक्सी: 3128 '})) यदि आप अपने urllib2 में http और http प्रॉक्सी दोनों का उपयोग करना चाहते हैं तो दूसरे http को https में बदलें – k9b

1

documentation urllib2 के लिए कहते हैं निम्नलिखित:

टिप्पणी: वर्तमान में urllib2 एक प्रॉक्सी के माध्यम से https स्थानों फ़ेच समर्थन नहीं करता। हालांकि, इसे this recipe में दिखाए गए के रूप में urllib2 को विस्तारित करके सक्षम किया जा सकता है।

मुझे उपरोक्त स्वीकार करना चाहिए कि ज्योथन 2.5.3 के लिए तुरंत काम नहीं किया गया है, लेकिन मैं अभी भी कोशिश कर रहा हूं।

अद्यतन: मैंने this patch को ज्योथन 2.5.3 पर लागू किया, और यह मेरे लिए काम किया। मैं अब प्रॉक्सी सर्वर पर HTTPS संसाधन ला सकता हूं।

UPDATE2:

from suds.client import Client 
from suds.transport.https import HttpAuthenticated 

credentials = dict(username='...', password='...', proxy={'https': 'host:port', 'http': 'host:port'}) 
t = HttpAuthenticated(**credentials) 
url = 'https://example.com/service?wsdl' 
client = Client(url, transport=t) 
print client.service.getFoo() 
संबंधित मुद्दे