Python 3.4 SSL error urlopen error EOF occurred in violation of protocol (_ssl.c:600)

匿名 (未验证) 提交于 2019-12-03 02:33:02

问题:

I use Arch Linux, python 3.4, openSSL 1.0.2d. When I make request to https://www.supercash.cz/ I get this error. It doesn't matter if I use requests or build in urllib there is always the same error. SSL certificate for this site seams to be OK in Chrome browser.

File "/usr/lib64/python3.4/urllib/request.py", line 463, in open     response = self._open(req, data) File "/usr/lib64/python3.4/urllib/request.py", line 481, in _open     '_open', req) File "/usr/lib64/python3.4/urllib/request.py", line 441, in _call_chain     result = func(*args) File "/usr/lib64/python3.4/urllib/request.py", line 1225, in https_open     context=self._context, check_hostname=self._check_hostname) File "/usr/lib64/python3.4/urllib/request.py", line 1184, in do_open     raise URLError(err) urllib.error.URLError: <urlopen error EOF occurred in violation of protocol (_ssl.c:600)> 

I tried this but it only works in python2.7 Error - urlopen error [Errno 8] _ssl.c:504: EOF occurred in violation of protocol , help needed

This is result of ssl test https://www.ssllabs.com/ssltest/analyze.html?d=supercash.cz

回答1:

This is the same error as this one: Python Requests requests.exceptions.SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol

You'll have to use custom HTTPAdapter as stated here: https://stackoverflow.com/a/14146031/407580

>>> import requests >>> from requests.adapters import HTTPAdapter >>> from requests.packages.urllib3.poolmanager import PoolManager >>> import ssl >>> >>> class MyAdapter(HTTPAdapter): ...     def init_poolmanager(self, connections, maxsize, block=False): ...         self.poolmanager = PoolManager(num_pools=connections, ...                                        maxsize=maxsize, ...                                        block=block, ...                                        ssl_version=ssl.PROTOCOL_TLSv1) ... >>> s = requests.Session() >>> s.mount('https://', MyAdapter()) >>> s.get('https://www.supercash.cz') <Response [200]> 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!