如何在python中创建等效于此curl调用的函数?

时间:2019-06-26 15:50:02

标签: python curl python-requests postman

我遇到以下代码的问题:

!curl -X POST \
      -H 'Content-Type':'application/json' \
      -d '{"data":[[4]]}' \
      http://0.0.0.0/score

如何将这段代码转换为Python函数或使用Postman?

2 个答案:

答案 0 :(得分:1)

import requests

payload = {
    "data": [[4]]
}

headers = {
    'Content-Type': "application/json",
}

server_url = 'http://0.0.0.0/score'

requests.post(server_url, json = payload, headers = headers)

应该大致等同于您的curl命令。

否则,要将curl转换为Python命令,可以使用https://curl.trillworks.com/#python之类的工具。

邮递员可以方便地"import" tool来导入curl这样的命令(将命令粘贴为原始文本)。
使用Postman的结果也可以是"exported" into Python code

答案 1 :(得分:0)

最短的等效文件(带有requests lib)如下所示:

import requests  # pip install requests
r = requests.post("http://0.0.0.0/score", json={"data":[[4]]})

requests将为此请求自动设置适当的Content-Type标头。


请注意,请求标头仍会有所不同,因为curlrequests总是隐式设置自己的标头集。

您的curl命令将发送以下标头集:

"Accept": "*/*",
"Content-Length": "8",  # not the actual content length
"Content-Type": "application/json",
"Host": "httpbin.org",  # for testing purposes
"User-Agent": "curl/7.47.0"

requests标头将如下所示:

"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"Content-Length": "8",
"Accept": "*/*",
"Content-Type": "application/json"

因此,您可以根据需要在User-Agent关键字参数中手动指定headers=标头。
但仍将使用压缩。