用python请求模仿curl命令

时间:2019-06-28 12:31:40

标签: python curl

我运行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)'),))

我该如何解决?

1 个答案:

答案 0 :(得分:2)

要忽略TLS错误,例如-k中的--insecurecurl),则需要使用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)