Win10下Flask API接收curl POST请求出现400错误求助
问题解决方法
错误根源
Windows命令提示符(cmd)不支持用单引号包裹JSON参数,你执行的curl命令里的单引号会被直接传递给Flask,导致实际收到的请求体是'{"filename": "xxx.jpg"}',开头的单引号破坏了JSON格式,触发解码错误。
解决步骤
1. 修正cmd下的curl命令
将单引号替换为双引号,同时对JSON内部的双引号用反斜杠转义:
curl -X POST http://127.0.0.1:5000/detect -H "Content-Type: application/json" -d "{\"filename\": \"xxx.jpg\"}"
2. 改用PowerShell执行
PowerShell支持单引号包裹JSON,直接运行你原来的命令即可:
curl -X POST http://127.0.0.1:5000/detect -H "Content-Type: application/json" -d '{"filename": "xxx.jpg"}'
3. 代码层面增强容错
为避免后续类似问题,在Flask接口中增加JSON解析的容错处理,不要直接访问request.json["filename"]:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/detect', methods=['POST']) def detect(): # 静默解析JSON,出错时返回None req_data = request.get_json(silent=True) # 校验参数是否存在 if not req_data or 'filename' not in req_data: return jsonify({'error': '无效的JSON格式或缺少filename参数'}), 400 # 获取文件名 filename = req_data['filename'] # 后续业务逻辑... return jsonify({'status': 'success', 'received_filename': filename})
4. 验证请求体内容(可选)
如果不确定请求体是否正确,可以在接口中打印原始数据排查:
@app.route('/detect', methods=['POST']) def detect(): print("Received request body:", request.data.decode('utf-8')) # 后续逻辑...
内容的提问来源于stack exchange,提问作者hit701
相关产品推荐
相关产品推荐

