[英]SSL error with Python 2 requests after upgrade to Ubuntu 18.04 LTS
我在针对https://www.wikidata.org的 Python 2 requests
中收到SSL错误。
import requests
url = "https://www.wikidata.org/w/api.php?action=wbgetentities&ids=L1%7CL2&format=json"
response = requests.get(url, verify=False)
response = requests.get(url)
尽管有警告,第一个请求还是可以通过。 第二个失败,并显示以下响应:
>>> response = requests.get(url)
From cffi callback <function _verify_callback at 0x7fe4c09ccf50>:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 315, in wrapper
_lib.X509_up_ref(x509)
AttributeError: 'module' object has no attribute 'X509_up_ref'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 506, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.wikidata.org', port=443): Max retries exceeded with url: /w/api.php?action=wbgetentities&ids=L1%7CL2&format=json (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))
我的Python 3和curl
可以使用:
curl "https://www.wikidata.org/w/api.php?action=wbgetentities&ids=L1%7CL2&format=json"
Qualys SSL Labs的报告https://www.ssllabs.com/ssltest/analyze.html?d=www.wikidata.org对于www.wikidata.org来说看起来不错。
我以为我的依赖项已更新:
>>> import requests, certifi, cryptography
>>> requests.__version__
'2.18.4'
>>> certifi.__version__
'2018.01.18'
>>> cryptography.__version__
'1.5.2'
$ aptitude show openssl | grep Version
Version: 1.1.0g-2ubuntu4.1
但是我看到我的requests
从Ubuntu发行版python-requests
获取版本:
$ aptitude show python-requests | grep Version
Version: 2.18.4-2
而我的点也失败了
$ pip2 search requests
拿出一个
AttributeError: 'module' object has no attribute 'X509_up_ref'
由于系统依赖性,我似乎无法做
$ sudo aptitude remove python-requests
以下工作均无效:
$ sudo pip2 uninstall pip
$ sudo apt-get install --reinstall python-pip
$ sudo pip install --upgrade requests
$ python2
>>> requests.__version__
'2.19.1'
>>> url = "https://www.wikidata.org/w/api.php?action=wbgetentities&ids=L1%7CL2&format=json"
>>> requests.get(url)
这解决了它:
$ sudo pip install --upgrade pyOpenSSL
$ python2
>>> url = "https://www.wikidata.org/w/api.php?action=wbgetentities&ids=L1%7CL2&format=json"
>>> import requests
>>> requests.get(url)
<Response [200]>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.