पर इस दिन का एक अच्छा हिस्सा बिताएं, और मैं अपने पर फिर से हूं समझ के परे। मेरे पास पाइथन 2.6.6/2.7.2 स्थापित के साथ 1 मशीन "ए" है, और पाइथन 2.6.7/2.7.2 के साथ एक और मशीन "बी" स्थापित है।Urllib.urlopen() 1 मशीन पर पायथन 2.6.6 के साथ SSLv3 urls पर काम करता है, लेकिन 2.67/2.7.2 के साथ अन्य
मशीन ए पर, मैं urllib2.urlopen('https://fed.princeton.edu')
के साथ एक एसएसवीवी 3-एन्क्रिप्टेड वेबसाइट पाइथन 2.6.6 का उपयोग कर लेकिन 2.7.2 नहीं कर सकता।
मशीन बी पर, मुझे पाइथन संस्करण का उपयोग करके वह वेबसाइट नहीं मिल सकती है।
तक नहीं मिल सकता है, मेरा मतलब है कि मैं त्रुटि मिलती है:
Traceback:
File "/usr/local/lib/python2.7/dist-packages/Django-1.3.1-py2.7.egg/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django_cas-2.0.3-py2.7.egg/django_cas/views.py" in login
78. user = auth.authenticate(ticket=ticket, service=service)
File "/usr/local/lib/python2.7/dist-packages/Django-1.3.1-py2.7.egg/django/contrib/auth/__init__.py" in authenticate
55. user = backend.authenticate(**credentials)
File "/usr/local/lib/python2.7/dist-packages/django_cas-2.0.3-py2.7.egg/django_cas/backends.py" in authenticate
72. username = _verify(ticket, service)
File "/usr/local/lib/python2.7/dist-packages/django_cas-2.0.3-py2.7.egg/django_cas/backends.py" in _verify_cas2
46. page = urlopen(url)
File "/usr/lib/python2.7/urllib.py" in urlopen
84. return opener.open(url)
File "/usr/lib/python2.7/urllib.py" in open
205. return getattr(self, name)(url)
File "/usr/lib/python2.7/urllib.py" in open_https
435. h.endheaders(data)
File "/usr/lib/python2.7/httplib.py" in endheaders
954. self._send_output(message_body)
File "/usr/lib/python2.7/httplib.py" in _send_output
814. self.send(msg)
File "/usr/lib/python2.7/httplib.py" in send
776. self.connect()
File "/usr/lib/python2.7/httplib.py" in connect
1161. self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
File "/usr/lib/python2.7/ssl.py" in wrap_socket
372. ciphers=ciphers)
File "/usr/lib/python2.7/ssl.py" in __init__
134. self.do_handshake()
File "/usr/lib/python2.7/ssl.py" in do_handshake
296. self._sslobj.do_handshake()
Exception Type: IOError at /login
Exception Value: [Errno socket error] [Errno 1] _ssl.c:503: error:140773F2:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert unexpected message
पहले, मैं उलझन में है कि कुछ है कि पहले के एक अजगर संस्करण पर काम करता मशीन एक पर बाद में काम नहीं करता हूँ मैं भी बहुत उलझन में हूं कि 2.6.6 पर काम करने वाला कुछ 2.6.7 पर काम नहीं करता है (हालांकि विभिन्न मशीनों पर)। यह क्यों होगा?
अब मुझे यकीन नहीं है कि पाइथन के लिए कॉन्फ़िगरेशन दोनों पर सटीक है, लेकिन import _ssl
और import httplib; httplib.HTTPSConnection
दोनों मशीनों पर सभी संस्करणों के लिए काम करता है। मैंने दोनों मशीनों पर curl -v https://fed.princeton.edu
और openssl fed.princeton.edu:https
भी कोशिश की है, और ये सभी काम कमांड करते हैं।
मैंने कुछ शोध भी किया है और How to use urllib2 to get a webpage using SSLv3 encryption पाया है जहां लेखक libCurl के लिए urllib पर छोड़ दिया गया था (मैं नहीं बल्कि तब से मैं django-cas का उपयोग कर रहा हूं, जो urllib का उपयोग करता है और मैं नहीं चाहता उस कोड के साथ बहुत मुश्किल है)।
नोट: मैं बस http://bugs.python.org/issue11220 पाया, और पिछले पोस्ट के समाधान मुझे वेबसाइट को खोलने के लिए urlopen उपयोग करने के लिए अनुमति देता है। लेकिन मैं django-cas में अपने urlopen() को हल करने के लिए उनके समाधान का उपयोग कैसे कर सकता हूं (जो urllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3()))
का उपयोग करना है?)?
क्या दो सिस्टम पर ओपनएसएसएल के विभिन्न संस्करण हैं? – larsks