DevEco Studio 仿真器无法发送网络请求
·
最近发现很多新手同学刚接触鸿蒙时,都会遇到仿真器能上网,但应用里就是发不出请求的问题。
其实这个问题真的不复杂,90% 的情况都是下面 4 个原因导致的,按顺序排查一遍,基本都能解决,不用搞那些复杂的抓包、改系统配置。
第一步:加网络权限
这个是最常见的问题,鸿蒙应用默认没有联网权限,所有请求都会被系统直接拦截,连个报错都不会有。
解决方法: 打开 entry/src/main/module.json5 文件,在 module 节点里加上这段:
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
最重要的一步:加完权限后,必须先关闭仿真器,再重新运行应用,不然权限不会生效。
第二步:解决 HTTP 请求被拦截
从 HarmonyOS 4.0 开始,系统默认禁止所有 HTTP 明文请求,只允许 HTTPS。所以如果你用的是本地测试接口(比如 http://localhost:3000),会直接失败。
表现:访问百度等 HTTPS 网站正常,自己的 HTTP 接口报错。
解决方法: 还是在 module.json5 的 module 节点里,加上安全配置:
"security": {
"network": {
"cleartextTrafficPermitted": true
}
}
提示:生产环境一定要删掉这段,强制用 HTTPS。
第三步:本地后端别用localhost
很多人用电脑跑后端服务,然后在仿真器里写 http://localhost:3000 去访问,这里也会出现问题。
因为仿真器是一个独立的虚拟机,它的 localhost 指向的是自己,不是你的电脑。
解决方法: 把 localhost 换成 10.0.2.2,这是仿真器专门用来访问电脑主机的地址。
// 错误写法
const url = 'http://localhost:3000/api/user';
// 正确写法
const url = 'http://10.0.2.2:3000/api/user';
另外,确保你的后端服务是绑定在 0.0.0.0 上的,而不是 127.0.0.1,不然外部设备还是访问不了。
第四步:检查仿真器本身的网络
如果上面三步都做了还是不行,先确认仿真器真的能上网:
- 打开仿真器里的浏览器
- 输入
www.baidu.com看能不能打开
- 如果浏览器也打不开:重启仿真器,关掉电脑上的代理和 VPN,基本就能好
- 如果浏览器能打开,只有你的应用不行:回到第一步重新检查权限和配置
快速验证流程
- 先在应用里请求
https://www.baidu.com→ 成功:网络和权限没问题 - 再请求你的 HTTPS 线上接口 → 成功:证书没问题
- 最后请求本地 HTTP 接口 → 用
10.0.2.2替换localhost
避坑总结
- 加完权限一定要重启仿真器!
- 本地后端访问用
10.0.2.2,不是localhost - HTTP 请求需要加明文允许配置
- 先测浏览器能不能上网,排除仿真器本身的问题
这四点就能解决绝大多数仿真器网络问题。
更多推荐
所有评论(0)