如何解决Python Flask接口调用返回403错误的问题
问题描述
在Mac系统上使用Python Flask搭建简易服务,实现代码如下:
from flask import Flask app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def hello(): print("request received") return "Hello world!" if __name__ == "__main__": app.run(debug=True)
通过python3 main.py命令启动该服务后,使用Postman以GET/POST方法请求地址http://localhost:5000/时,接口始终返回HTTP 403错误。
运行环境信息:
- Python版本:3.8.9
- 操作系统:Mac OS 12.4
- Flask版本:2.1.2
问题原因
Mac OS 12及以上版本系统默认开启AirPlay接收器功能,该功能会默认占用5000端口。启动Flask时如果没有指定其他端口,部分场景下端口占用的提示不明显,此时发往5000端口的请求实际被系统的AirPlay服务接收,该服务不响应普通HTTP接口请求,会直接返回403状态码。
可以先在终端执行以下命令验证端口占用情况:
lsof -i :5000
如果输出的进程名包含ControlCenter或AirPlay相关系统进程,即可确认是端口被占用导致的问题。
解决方案
两种方案二选一即可:
- 更换Flask服务监听端口:修改代码中
app.run的配置,指定一个未被占用的端口(比如5001),修改后代码如下:
重新启动服务后,请求地址改为if __name__ == "__main__": app.run(debug=True, port=5001)http://localhost:5001/即可正常访问。 - 释放5000端口:打开Mac系统设置 → 通用 → 隔空播放与接力,关闭「AirPlay接收器」开关,等待端口释放后重新启动Flask服务,即可正常通过5000端口访问接口。
内容的提问来源于stack exchange,提问作者HarshIT
相关产品推荐
相关产品推荐

