You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Flask无Content-Type头时POST JSON反序列化失败原因

问题原因解析

核心原因是Flask对不同Content-Type的请求体有不一样的解析逻辑:

  1. 未加Content-Type: application/json请求头时:

    • curl默认会把--data里的内容以application/x-www-form-urlencoded类型发送给服务器
    • Flask识别到这个类型后,会自动把请求体解析成表单数据(存在request.form里),这时request.data会被清空成空字符串
    • 你的代码里调用json.loads(request.data),本质是尝试解析空字符串,直接触发了JSONDecodeError,导致500错误
  2. 添加Content-Type: application/json请求头后:

    • Flask识别到这是JSON格式的请求体,不会把它解析成表单数据,request.data会完整保留原始的JSON字符串
    • json.loads(request.data)就能正常解析这个字符串,后续的业务逻辑自然能顺利执行

额外优化提示

其实不用手动调用json.loads(request.data),Flask提供了更省心的方法:
可以用request.get_json(),它会自动根据请求头判断并解析JSON,还能处理解析失败的场景,代码可以改成这样:

def post(self):
    foo = Foo(**request.get_json())
    return make_response(str(self._factor * foo.bar), 200)

内容的提问来源于stack exchange,提问作者Tobias Hermann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:20:22