我正在使用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')
答案 0 :(得分:1)
将data
对象转换为字符串而不是dict
。你可以通过
data = json.dumps(payload)