API在Postman中正常运行但Flutter中出现连接拒绝问题
排查思路与解决方案
核心问题解析
Postman能正常请求http://127.0.0.1:8000/api/login是因为它运行在你的电脑本地,直接指向服务器;但Flutter运行在模拟器/真机时,127.0.0.1会指向设备自身而非你的电脑,这是连接拒绝的最常见原因。
1. 替换本地IP为电脑局域网IP
- 查看电脑的局域网IP:Windows执行
ipconfig,Mac/Linux执行ifconfig或ip addr,找到类似192.168.x.x的地址 - 修改代码中的URL:
var url = Uri.parse('http://192.168.x.x:8000/api/login'); - 确保设备(模拟器/真机)和电脑处于同一Wi-Fi网络
2. 调整服务器绑定地址
多数本地服务器默认仅绑定127.0.0.1,仅允许本机访问,需改为绑定0.0.0.0开放局域网访问:
- Django:启动命令改为
python manage.py runserver 0.0.0.0:8000 - Node.js:将监听地址设为
0.0.0.0而非127.0.0.1 - 其他框架同理,找到服务器启动的绑定配置修改
3. Android模拟器专属快捷IP
Android模拟器内置了映射宿主机本地IP的特殊地址10.0.2.2,直接替换即可:
var url = Uri.parse('http://10.0.2.2:8000/api/login');
无需查找局域网IP,适合快速测试。
4. 检查防火墙规则
- 临时关闭电脑防火墙测试,若能连接,说明防火墙拦截了8000端口请求,需添加入站规则允许该端口的局域网访问
- 确认服务器所在的杀毒软件、安全工具没有拦截端口
5. 对齐请求格式与Postman
即便Postman能访问,Flutter的请求格式可能与Postman不符:
- 你当前用
jsonEncode(map)发送JSON格式,但Postman可能使用form-data或x-www-form-urlencoded - 若服务器期望表单格式,修改请求代码:
var response = await http.post(url, headers: { 'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded' }, body: map ); - 对比Postman的请求头、参数格式,确保Flutter请求完全一致
6. 真机测试额外配置
- 确认手机与电脑在同一Wi-Fi,且Wi-Fi未开启设备隔离模式
- 检查手机应用权限,确保Flutter APP已获得网络访问权限
内容的提问来源于stack exchange,提问作者anna
相关产品推荐
相关产品推荐

