我运行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)'),))
我该如何解决这个问题?
最佳答案
要忽略 TLS 错误,例如 curl
中的 -k
(--insecure
),您需要使用 verify=错误的
参数。
要传递 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)
关于python - 用python请求模仿curl命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56807005/