我运行curl命令,如下所示:
curl --tlsv1.2 -k -i -X POST -d 'payload={<json-payload>}' https://url.com:/handles/handle1
运行良好。现在我需要在python中模仿它。参考this解决方案,我尝试在python控制台中运行它:
>>> import requests
>>> data = 'payload={<json-payload>}'
>>> headers = {'Content-type':'application/json'}
>>> response = requests.post('https://url.com:/handles/handle',headers=headers,data=data)
但是出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/requests/api.py", line 116, inpost
return request('post', url, data=data, json=json, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='url.com', port=443): Max retries exceeded with url: /handles/handle (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)'),))
我该如何解决?
答案 0 :(得分:2)
要忽略TLS错误,例如-k
中的--insecure
(curl
),则需要使用verify=False
参数。
要传递POST数据,请使用dict
:
data = {'payload': <json-payload>}
现在您的请求变为:
requests.post('https://url.com:/handles/handle', headers=headers, data=data, verify=False)
如果要对POST data
进行JSON序列化,请使用json
参数而不是data
:
requests.post('https://url.com:/handles/handle', headers=headers, json=data, verify=False)