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

Flask接口调用遇JSON解码失败及405错误求助

Flask接口请求问题排查与解决

第一个错误:JSON解码失败

你用curl -d "{35465460:55}" 127.0.0.1:5000/post时犯了两个错:一是JSON格式不规范——JSON要求键必须用双引号包裹;二是-d参数默认发送的是application/x-www-form-urlencoded格式,不是JSON,Flask没法自动解析成JSON结构。

正确的curl命令应该这么写:

curl -H "Content-Type: application/json" -d '{"35465460": 55}' 127.0.0.1:5000/post

这里要注意三点:

  • 加-H "Content-Type: application/json"告诉服务器请求体是JSON格式
  • 用单引号包裹JSON内容,避免shell解析双引号出问题
  • 键35465460必须用双引号包裹,符合JSON语法规范

第二个错误:方法不允许

curl 127.0.0.1:5000/post?data={1:1}用的是GET请求,但你的/post接口应该是用@app.route('/post', methods=['POST'])定义的,只接受POST方法,所以返回405错误是正常的。如果非要用GET传数据,需要修改路由的methods参数加上GET,但一般POST接口不建议这么做,还是用POST请求传JSON更符合REST规范。

Flask获取JSON数据的正确写法

你的app.py里要确保正确解析JSON请求体,示例代码参考:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/post', methods=['POST'])
def handle_post():
    # 先校验请求格式
    if not request.is_json:
        return jsonify({"error": "请求必须是JSON格式"}), 400
    # 获取JSON数据
    data = request.get_json()
    # 处理后返回结果
    return jsonify({"received_data": data})

if __name__ == '__main__':
    app.run(debug=True)

核心要点:

  • 路由必须指定methods=['POST'](如果要支持GET就加GET)
  • 用request.get_json()获取JSON数据,前提是请求头Content-Type要设为application/json
  • 提前用request.is_json做格式校验,避免后续解析出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:50:43