【问题标题】:Imitating curl command with python requests用 python 请求模仿 curl 命令
【发布时间】:2019-06-28 12:31:40
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

标签: python curl


【解决方案1】:

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

【讨论】:

  • 获取/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py:851: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)
  • @anir 你用过verify=False吗?
  • @anir 这很奇怪。你在哪个requests 版本?也请添加完整的回溯到您的问题。
  • 我在我们的开发环境中托管的 jupyter notebook 中运行它。不幸的是,这是我们可以直接在开发环境中进行开发的唯一方法。我无法获得详细的堆栈跟踪。是否有可能在jupyter中获得它?这是它目前的样子:image
猜你喜欢
  • 2019-07-07
  • 2018-10-21
  • 1970-01-01
  • 2018-09-27
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多