【问题标题】:requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'SSL23_GET_SERVER_HELLO', 'sslv3 alert handshake failure')],)",)requests.exceptions.SSLError: ("糟糕的握手: 错误([('SSL 例程', 'SSL23_GET_SERVER_HELLO', 'sslv3 警报握手失败')],)",)
【发布时间】:2017-10-13 15:26:29
【问题描述】:

我做到了

import requests

url = "https://randomuser.me/api/"
data = requests.get(url).json()


print data

我一直在得到

Traceback (most recent call last):
  File "/Applications/MAMP/htdocs/code/python/curl.py", line 4, in <module>
    data = requests.get(url).json()
  File "/Library/Python/2.7/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 596, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'SSL23_GET_SERVER_HELLO', 'sslv3 alert handshake failure')],)",)

但是如果我运行这个 curl https://randomuser.me/api/

在我的终端上,我得到了

{"results":[{"gender":"male","name":{"title":"mr","first":"joscha","last":"maier"},"location":{"street":"7686 parkstraße","city":"kelheim","state":"hessen","postcode":46836},"email":"joscha.maier@example.com","login":{"username":"bluefrog937","password":"2003","salt":"xcZH4xOX","md5":"9fc3a4c2c8999066149d322ab4948669","sha1":"1c392831338c7b5715bd19a4c186111df32a6d04","sha256":"a21b5afa260d8d6a121d6f2dc688fb2f2b41e4f0b5c823daea76f968338653fb"},"dob":"1994-10-26 06:51:40","registered":"2009-05-25 10:37:41","phone":"0509-5347389","cell":"0174-6616884","id":{"name":"","value":null},"picture":{"large":"https://randomuser.me/api/portraits/men/26.jpg","medium":"https://randomuser.me/api/portraits/med/men/26.jpg","thumbnail":"https://randomuser.me/api/portraits/thumb/men/26.jpg"},"nat":"DE"}],"info":{"seed":"f74c00ae752dccac","results":1,"page":1,"version":"1.1"}}

【问题讨论】:

    标签: python macos ssl curl


    【解决方案1】:

    您的代码在 Python 2.7.12 中非常适合我。你没有给出你正在使用的 Python 的确切版本,但我猜它是 2.7.9 之前的版本。在 2.7.9 中,对 SSL 实现进行了几处更改,包括添加对 Server Name Indication (SNI) 的支持。使用SSLLabs 测试站点时可以看出,您的目标 URL 需要在客户端支持 SNI:

    此站点仅适用于支持 SNI 的浏览器。

    您显示的跟踪是典型的不支持 SNI 的客户端。 来自FAQ for requests:

    Python3 和 Python 2.7.9+ 在其 SSL 模块中包含对 SNI 的原生支持。有关在 Python Stack Overflow answer。

    【讨论】:

    • 我的python版本/usr/bin/python --version --> Python 2.7.10
    • @ihue: 哪个版本的 OpenSSL ssl.OPENSSL_VERSION 和请求 requests.__version__ ?
    • 如果你不介意,我问,我如何检查这 2 个信息?
    • @ihue:我认为我的评论很清楚,但see here 是您可以使用的完整 python 代码。
    猜你喜欢
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2019-08-16
    • 2016-05-09
    • 2016-10-10
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多