将curl POST转换为python请求

时间:2016-05-22 14:48:58

标签: python curl python-requests

我正在使用curl POST在我的系统上测试tipboard的API。我能够使用以下方法成功地向董事会发送POST:

curl https://** SECRET **/api/v0.1/** SECRET **/push -X POST -d "tile=big_value" -d "key=t_out" -d 'data={"title": "Outside Temperature", "description": "Temperature gathered by DS18B20 sensor", "big-value": "24.4 °C"}'

由于最终将使用的脚本基于Python,我做了一些研究并找到了requests python库。

我将curl请求转换为以下代码:

payload = {'title': 'big_value', 'key': 't_out', 'data': '"title": "Outside Temperature", "description": "Temperature gathered by DS18B20 sensor", "big-value": "24.4 °C"'}
r = requests.post("https://** SECRET **/api/v0.1/** SECRET **/push", data=payload)
print(r.text)
print(r.status_code, r.reason)

这给了我以下错误代码:

There is no 'tile' field in your request.
(400, 'Bad Request')

我认为我的有效负载设置不正确,最有可能的问题是,我只发送一个"数据"使用Python时的对象,而不是发送多个"数据元素"喜欢卷曲。

如何将我的curl请求同样转换为Python变体?

编辑:

遵循Dan Lowe的暗示,我有一个'标题'而不是' tile'在我的请求中,使用以下(已编辑)代码引导我进一步发生错误:

payload = {'tile': 'big_value', 'key': 't_out', 'data': '"title": "Outside Temperature", "description": "Temperature gathered by DS18B20 sensor", "big-value": "24.4 °C"'}
r = requests.post("https://dev-01.linuxmind.de/api/v0.1/46d7213bd81d441783dc9ab77e5515c2/push", data=payload)
print(r.text)
print(r.status_code, r.reason)

错误:

Invalid JSON data.

(400, 'Bad Request')

1 个答案:

答案 0 :(得分:1)

data对象转换为字符串而不是dict。你可以通过

来做到这一点
data = json.dumps(payload)