繁体   English   中英

升级到Ubuntu 18.04 LTS后,Python 2请求出现SSL错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM