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
相关产品推荐
相关产品推荐

