【发布时间】:2020-05-21 12:11:32
【问题描述】:
我有一个这样的 curl 请求:
curl -X POST http://mdom-n-plus-1.nonprod.appsight.us:8081/mesmerdom/v1/getByScreen -F "data={\"screen\":{\"screen-id\":\"57675\"}}"
我正在尝试使用类似这样的方法将其转换为 python:
import requests
import json
url = "http://mdom-n-plus-1.nonprod.appsight.us:8081/mesmerdom/v1/getByScreen"
payload = {"data": json.dumps({"screen":["screen-id", "57675"]})}
req = requests.post(url, data=payload)
print (req.text)
但我收到以下错误:
io.finch.Error$NotPresent: Required param 'data' not present in the request.
在这种情况下,将 bash curl 调用转换为 python 请求的最佳方法是什么?
【问题讨论】:
-
"data={\"screen\":{\"screen-id\":\"57675\"}}"由于外壳而被转义。所以你不需要做json.dumps。将{"data":{"screen":{"screen-id":"57675"}}}中的json参数传递给json参数 -
我这样做
payload = {"data":{"screen":{"screen-id":"57675"}}} req = requests.post(url, data=json.dumps(payload))。我仍然得到同样的错误。 -
即使我使用json参数
payload = {"data":{"screen":{"screen-id":"57675"}}} req = requests.post(url, json=payload),我也会得到同样的错误。 -
-F在 curl 中是表单数据。我认为如果您执行 json.dumps 并在files中发送内容,这将起作用。您只需将data=payload从原始代码更改为files=payload -
如果我这样做
payload = {'data': json.dumps({"screen":["screen-id", "57675"]})} req = requests.post(url, files=payload),我会得到同样的错误io.finch.Error$NotPresent: Required param 'data' not present in the request.
标签: python curl python-requests