Flutter真机无法连接Laravel本地端点 其余环境访问正常
问题描述
Flutter开发阶段,物理真机设备无法连接本地部署的Laravel服务接口,相关实现代码如下:
String url = 'http://localhost/eltriodigital/public/api/prueba'; String url2 = 'http://192.168.56.1/eltriodigital/public/api/prueba'; String url3 = 'https://ecleectic.com/api/prueba'; Future<Response> prueba() async { Response response = await get(url, headers: {'Content-type': 'application/json'}); return response; }
已完成的验证结果:
- 生产环境HTTPS接口(对应
url3)访问正常 - 模拟器访问本地接口(对应
url、url2)正常 - Flutter Web端访问本地接口(对应
url、url2)正常
故障原因
- 回环地址认知偏差:
localhost/127.0.0.1是设备自身的回环地址,模拟器访问该地址能通是因为模拟器内置了端口转发规则,会将模拟器内的回环请求映射到开发机本地服务;Flutter Web运行在开发机浏览器中,localhost直接指向开发机,因此可以正常访问。但物理真机的localhost指向真机本身,和运行Laravel的开发机没有任何关联,必然无法连通。 - 虚拟网卡IP不可跨设备路由:
192.168.56.1是VirtualBox、VMware等虚拟化软件生成的Host-Only虚拟网卡地址,仅能被开发机本地、同虚拟网络下的虚拟机访问,和物理真机不在同一可路由网段,真机无法向该地址发送有效请求。 - 系统明文访问拦截:Android 9+、iOS 9+系统默认禁止应用发起HTTP明文请求,本地Laravel服务默认跑在HTTP协议下,即使地址正确也会被系统网络层拦截。
- 服务监听范围限制:如果通过
php artisan serve启动Laravel服务时未指定监听地址,默认仅监听127.0.0.1回环地址,同网段其他设备发来的请求会被直接丢弃;如果用Nginx/Apache部署本地环境,也可能存在仅监听回环地址的配置问题。 - 网络链路不通:开发机和物理真机未接入同一局域网、开发机防火墙拦截了服务对应端口、路由器开启AP隔离禁止同网段设备互访,都会导致请求无法到达开发机。
排查解决步骤
- 统一网络环境:将开发机、物理真机连接到同一个WiFi下,确认路由器未开启AP隔离,临时关闭开发机系统防火墙(Windows Defender防火墙、MacOS防火墙均可临时关闭测试,连通后再单独添加端口放行规则即可)。
- 获取开发机真实局域网IP:不要使用虚拟网卡、回环地址,Windows系统执行
ipconfig、Mac/Linux系统执行ip a,找到当前连接WiFi的物理网卡对应的IPv4地址,通常为192.168.0.x、192.168.1.x、192.168.3.x这类私网段地址,例如192.168.1.105。 - 调整Laravel服务监听配置:如果用
php artisan serve启动服务,执行命令时指定监听所有网卡地址:php artisan serve --host=0.0.0.0 --port=8000;如果用Nginx/Apache部署本地环境,确认服务配置中监听地址为0.0.0.0:80而非127.0.0.1:80。 - 脱离Flutter验证链路:直接用物理真机自带的浏览器访问拼接好的本地接口地址,例如
http://192.168.1.105/eltriodigital/public/api/prueba,如果这一步无法访问,说明问题出在网络、防火墙、服务配置层面,和Flutter代码无关,先把这步调通再继续。 - 放开端侧明文访问限制:
- Android端:在
android/app/src/main/AndroidManifest.xml的<application>标签下添加属性android:usesCleartextTraffic="true",允许应用发起HTTP明文请求。 - iOS端:在
ios/Runner/Info.plist中添加如下配置,放开ATS限制:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> - Android端:在
- 替换代码中的请求地址:将代码里的接口地址替换为上一步真机浏览器验证通过的局域网地址,重新编译运行到物理真机即可。
调试提示:本地真机调试场景下,永远不要用
localhost、虚拟网卡IP作为服务地址,这类地址在物理真机上无法指向开发机本地服务。
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

