在使用 Flask 开发 Web 接口时,经常会遇到客户端请求返回 415 Unsupported Media Type 错误。该错误通常表示服务器无法处理请求中指定的媒体类型(Content-Type)。常见原因是客户端发送了服务器不支持的数据格式,例如未正确设置 Content-Type 请求头,或 Flask 未配置对应的请求解析器。解决方法包括:检查并设置正确的 Content-Type(如 application/json)、确保 Flask 安装了对应解析扩展(如 Flask-RESTful、Flask-JWT 等),或手动解析请求数据。掌握这些调试技巧有助于快速定位并修复接口兼容性问题。
1条回答 默认 最新
小丸子书单 2025-06-26 18:10关注一、理解 415 Unsupported Media Type 错误
在使用 Flask 开发 Web 接口时,客户端请求返回
415 Unsupported Media Type是一个常见的 HTTP 状态码。该错误表示服务器无法处理请求中指定的媒体类型(Content-Type),通常是因为服务器不支持客户端发送的数据格式。常见表现形式包括:
- 客户端发送 JSON 数据但未设置正确的 Content-Type 头。
- Flask 应用未安装或配置相应的解析库,如 Flask-RESTful。
- 使用了非标准或自定义的媒体类型,导致 Flask 默认解析器无法识别。
二、问题分析流程图
graph TD A[收到客户端请求] --> B{是否有 Content-Type 请求头?} B -- 否 --> C[返回 415 错误] B -- 是 --> D{是否为服务器支持的类型?} D -- 否 --> E[返回 415 错误] D -- 是 --> F[正常解析并处理请求]三、从浅入深的问题排查与解决方法
1. 检查请求头中的 Content-Type
最常见的问题是客户端没有正确设置
Content-Type请求头。例如,当客户端发送 JSON 数据时,应确保头部包含:Content-Type: application/json否则 Flask 将无法识别数据格式,从而引发 415 错误。
2. 使用 Flask 内置的 request.get_json() 方法
Flask 提供了便捷的方法来解析 JSON 请求体:
@app.route('/example', methods=['POST']) def example(): data = request.get_json() return jsonify(data)如果请求不是 JSON 格式,或者未设置正确的 Content-Type,将自动返回 415 错误。
3. 安装并集成 Flask-RESTful 扩展
如果你正在开发 RESTful API,推荐使用 Flask-RESTful 扩展。它提供了更强大的请求解析能力:
from flask_restful import reqparse parser = reqparse.RequestParser() parser.add_argument('username', type=str, required=True, help='Username is required')Flask-RESTful 能更好地处理不同类型的输入,并自动验证 Content-Type。
4. 自定义请求解析逻辑
对于非标准的媒体类型,可以手动实现解析逻辑:
@app.before_request def parse_custom_media_type(): if request.mimetype == 'application/custom': request.custom_data = json.loads(request.data)这种方式适用于需要支持特定格式(如 XML、YAML)或企业内部自定义格式的情况。
四、调试技巧与建议
步骤 操作 目的 1 检查请求头 确认 Content-Type 是否正确 2 打印 request.headers 查看实际接收到的请求头内容 3 使用 Postman 或 curl 测试接口 模拟请求并观察响应 4 启用 Flask 的调试模式 获取更详细的错误信息 本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报