我正在尝试使用 rauth 在 twitter 上进行 oauth,但它似乎失败并出现以下错误:
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
经过一些测试,我发现在尝试访问 api.twitter.com 并验证 https 连接时,请求似乎中断了。这是一个示例,它似乎适用于https://github.com,但不适用于https://api.twitter.com:
>>> import requests
>>> requests.get('https://github.com', verify=True)
<Response [200]>
>>> requests.get('https://api.twitter.com/oauth/request_token',verify=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "requests/api.py", line 65, in get
return request('get', url, **kwargs)
File "requests/safe_mode.py", line 39, in wrapped
return function(method, url, **kwargs)
File "requests/api.py", line 51, in request
return session.request(method=method, url=url, **kwargs)
File "requests/sessions.py", line 252, in request
r.send(prefetch=prefetch)
File "requests/models.py", line 632, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
>>> requests.get('https://api.twitter.com',verify=True)
[SNIP] Same error as above
这是请求中的错误吗?这应该与 rauth 正在运行的类似,所以我不确定它为什么不能在我的机器上运行。
来自@thomas-orozco 的一些很好的讨论,它似乎是一个无法验证 G2 VeriSign 证书的 openssl:http: //pastebin.com/ZZj3s5uN
看来我使用 certool 获得了 VeriSign CA:
certtool y k=/System/Library/Keychains/SystemCACertificates.keychain | grep -i verisign
chrome / safari 正在使用它,而不是命令行上的 openssl 。我可以做些什么来让 Requests 加载正确的证书吗?