Flask:使用Requests提交的传入JSON无法解码

3

我在尝试解码作为JSON发送到我的服务器的Python字典时遇到问题。以下是我的应用程序中的内容:

payload = {'status':[bathroomId,item,percentage,timestamp]}
r=requests.post(url,None,json.dumps(payload))

以下是我在Flask服务器中的操作:

req = request.get_json()
print req['status']

当我尝试打印req['status']的内容时,似乎Python无法识别它是一个字典,并且我收到了一个内部服务器错误。
我尝试打印req,但得到的是None
我缺少了什么?

我尝试了,仍然不起作用。 - Alessandro Gaballo
1个回答

4

除非在请求中设置了Content-Type头为application/json,否则Flask将不会尝试解码请求体中的任何JSON

相反,get_json将返回None(这就是您现在看到的情况)。

因此,您需要在请求中设置Content-Type头。

幸运的是 自版本2.4.2(一年前发布)以来, requests有一个帮助参数用于发布JSON;这将为您设置适当的标头。使用:

requests.post(url, json=payload)

或者(例如使用 requests < 2.4.2),您可以自己设置标头:

requests.post(url, data=json.dumps(payload), headers={"Content-Type": "application/json"})

以下是来自Flask的相关代码:


@AlessandroGaballo 你无法使用 json=... 吗?如果是这样,你可能需要升级 requests:2.4.2 已经一年了。 - Thomas Orozco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接