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

Postman调用Flask Web API返回400 Bad Request错误排查

问题现象

基于Flask框架开发的JSON格式Web API,此前运行正常,通过Postman调用时返回400 Bad Request响应,响应内容如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>Did not attempt to load JSON data because the request Content-Type was not 'application/json'.</p>

服务端命令行同步输出日志:

"POST /json HTTP/1.1" 400 -
code 400, message Bad request syntax ('{')
"None /json HTTP/0.9" HTTPStatus.BAD_REQUEST -.
错误根因
  • 请求头缺失或错误:Flask默认仅在请求携带Content-Type: application/json头时,才会尝试解析请求体中的JSON数据,未匹配到该头时直接返回400错误,和响应页提示完全对应
  • 请求格式非法:日志中Bad request syntax ('{')、HTTP/0.9报错说明服务端收到的请求协议不符合HTTP/1.1规范,通常是JSON语法错误(括号不闭合、引号不匹配、多余尾逗号),或是JSON内容被错误填入Postman的form-data、x-www-form-urlencoded等非raw请求体区域,导致服务端无法正常解析请求头和请求体的分隔边界,误判定为无请求头的HTTP/0.9请求。
修复方案
  • Postman侧配置修正
    • 打开请求的Body标签,选中raw选项,将右侧格式下拉框从默认的Text切换为JSON,该操作会自动为请求添加正确的Content-Type: application/json请求头
    • 在raw编辑区填入语法合法的JSON结构,确认所有键名使用英文双引号包裹、对象和数组的括号完全闭合、键值对末尾无多余逗号
    • 切换到Headers标签校验,确认Content-Type值为application/json,无拼写错误或错误的编码参数
  • Flask侧兼容配置(可选,仅用于调试场景)
    如果需要临时跳过Content-Type校验强制解析JSON,可以在调用get_json时传入force=True参数,示例代码:
    from flask import Flask, request, jsonify
    app = Flask(__name__)
    
    @app.route('/json', methods=['POST'])
    def handle_json():
        req_data = request.get_json(force=True)
        # 执行业务逻辑
        return jsonify({"code": 0, "msg": "success", "data": req_data})
    
    注意:开启force参数会跳过请求格式校验,若收到非JSON格式的请求体可能触发解析异常,生产环境不建议开启

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:39:17