На этот вопрос уже есть ответ:
Пожалуйста, не отмечайте вопрос как дубликат. Я использовал все возможности, но не нашел ответа. Я использую Ubuntu 12.04 (LTS)
Функция Python urlopen вызывает это сообщение об ошибке, когда в качестве входных данных указывается https-сайт:
Traceback (most recent call last):
File "fb.py", line 13, in
htmlfile = urllib.urlopen(url)
File "/usr/lib/python2.7/urllib.py", line 86, in urlopen
return opener.open(url)
File "/usr/lib/python2.7/urllib.py", line 207, in open
return getattr(self, name)(url)
File "/usr/lib/python2.7/urllib.py", line 436, in open_https
h.endheaders(data)
File "/usr/lib/python2.7/httplib.py", line 954, in endheaders
self._send_output(message_body)
File "/usr/lib/python2.7/httplib.py", line 814, in _send_output
self.send(msg)
File "/usr/lib/python2.7/httplib.py", line 776, in send
self.connect()
File "/usr/lib/python2.7/httplib.py", line 1161, in connect
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
File "/usr/lib/python2.7/ssl.py", line 381, in wrap_socket
ciphers=ciphers)
File "/usr/lib/python2.7/ssl.py", line 143, in __init__
self.do_handshake()
File "/usr/lib/python2.7/ssl.py", line 305, in do_handshake
self._sslobj.do_handshake()
IOError: [Errno socket error] [Errno 8] _ssl.c:504: EOF occurred in violation of protocol
Как это исправить?
Вы не дали свой URL, таким образом, я попробовал этот сайт.
import sys
import urllib
print sys.version
2.7.5 + (значение по умолчанию, 19 сентября 2013, 13:48:49)
[GCC 4.8.1]
print urllib.__version__
1.17
url = 'https://askubuntu.com'
res = urllib.urlopen(url)
print res.url
print res.headers
Cache-Control: public, max-age=60 Content-Type: text/html; charset=utf-8 Expires: Sun, 23 Feb 2014 15:01:28 GMT Last-Modified: Sun, 23 Feb 2014 15:00:28 GMT Vary: * X-Frame-Options: SAMEORIGIN Date: Sun, 23 Feb 2014 15:00:28 GMT Connection: close Content-Length: 70580
, По крайней мере, на Ubuntu 13.10 я не могу воспроизвести проблему.