在使用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请求
答案 0 :(得分:1)
根据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 2015年7月14日
由于OpenSSL 0.9.8仅支持TLS 1.0,特别是TLS 1.2,因此客户端和服务器之间没有通用的TLS协议。因此,握手失败。
解决问题的方法是将Python使用的OpenSSL版本从旧版本升级到至少OpenSSL 1.0.1。有关详细信息,请参阅示例Updating openssl in python 2.7或使用预先安装了大量模块的Anaconda Python,其中还包括当前版本的OpenSSL。