标签:python python-3-x ssl python-3-4
我使用Arch Linux,python 3.4,openSSL 1.0.2d.当我向https://www.supercash.cz/发出请求时,我收到此错误.如果我使用请求或构建urllib并不重要,则始终存在相同的错误.此网站的SSL证书在Chrome浏览器中可以正常使用.
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)>
我试过这个,但它只适用于python2.7
Error – urlopen error [Errno 8] _ssl.c:504: EOF occurred in violation of protocol , help needed
这是ssl test https://www.ssllabs.com/ssltest/analyze.html?d=supercash.cz的结果
解决方法:
您必须使用此处所述的自定义HTTPAdapter: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]>
标签:python,python-3-x,ssl,python-3-4 来源: https://codeday.me/bug/20190528/1169390.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。