在使用 MacOS X 的 Python 中,尝试向网站发出 POST 请求,但出现以下错误 post_response = session.post(post_url, data=post_payload, headers=post_headers)
:
Traceback (most recent call last):
File "web_requests.py", line 424, in <module>
main()
File "web_requests.py", line 340, in main
post_response = session.post(post_url, data=post_payload, headers=post_headers)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 535, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 609, 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: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)
可能是什么问题?
预先感谢您,一定会投票/接受答案
编辑
特定于Python中的POST请求
根据评论中的附加信息,SSLLabs 报告该站点仅支持 TLS 1.2:
TLS 1.2 Yes
TLS 1.1 No
TLS 1.0 No
SSL 3 No
根据评论中的另一个信息,OpenSSL 版本是 0.9.8:
.. OpenSSL 0.9.8zg 14 July 2015
由于 OpenSSL 0.9.8 最多只支持 TLS 1.0,尤其是不支持 TLS 1.2,因此客户端和服务器之间没有通用的 TLS 协议(protocol)。因此,握手失败。
解决此问题的方法是将 Python 使用的 OpenSSL 版本从非常旧的版本升级到至少 OpenSSL 1.0.1。参见示例 Updating openssl in python 2.7了解更多信息或使用 Anaconda Python它预装了许多模块,还包括当前版本的 OpenSSL。
我是一名优秀的程序员,十分优秀!