Flutter发送HTTP POST请求模拟器报错但Postman正常问题求助
问题根因
你遇到的Connection refused报错属于典型的网络寻址错误:模拟器环境内的localhost指向的是模拟器自身的本地回环地址,并非运行后端服务的开发电脑的地址。Postman运行在你的开发电脑上,请求localhost自然可以正常访问到后端,而模拟器访问localhost时找不到对应运行在5050端口的服务,就会抛出连接拒绝错误。
解决方法
根据你使用的模拟器类型选择对应方案即可:
- 安卓模拟器:安卓系统预留了
10.0.2.2作为指向开发主机的固定别名,直接替换请求地址中的localhost即可,修改后代码如下:
var url = Uri.parse("http://10.0.2.2:5050/signup");
- iOS模拟器:替换请求地址中的
localhost为你开发电脑的局域网IP即可,你可以在Windows的CMD中执行ipconfig、在macOS/Linux的终端中执行ifconfig查询本机局域网IP,假设你的电脑IP是192.168.1.102,修改后代码如下:
var url = Uri.parse("http://192.168.1.102:5050/signup");
额外注意事项
- 确保你的开发电脑和模拟器连接的是同一个局域网,没有防火墙拦截5050端口的访问请求
- 建议修改后端服务的监听配置,将原来只监听本地回环地址改为监听所有网卡,保证局域网设备可以访问,修改服务端
app.listen部分代码如下:
app.listen(port, '0.0.0.0', () => { console.log(`Example app listening at http://0.0.0.0:${port}`) })
- 高版本的安卓和iOS系统默认禁止明文HTTP请求,调试阶段可以单独配置白名单允许当前测试地址的HTTP请求,上线后请替换为HTTPS协议的线上服务地址。
内容的提问来源于stack exchange,提问作者imran sifat
相关产品推荐
相关产品推荐

