编写了HTTP请求代码,在模拟器上运行时,能够正常获取网络数据,但在真机上运行时,提示“网络不可用”,无法发送请求。已检查真机网络(WiFi和移动数据都正常),也在config.json中添加了网络权限,但问题仍未解决。请问这是什么原因?鸿蒙应用真机测试时,网络请求失败的常见原因有哪些?该如何排查?比如是否需要配置网络安全策略?
编写了HTTP请求代码,在模拟器上运行时,能够正常获取网络数据,但在真机上运行时,提示“网络不可用”,无法发送请求。已检查真机网络(WiFi和移动数据都正常),也在config.json中添加了网络权限,但问题仍未解决。请问这是什么原因?鸿蒙应用真机测试时,网络请求失败的常见原因有哪些?该如何排查?比如是否需要配置网络安全策略?
在鸿蒙开发中,HTTP请求在真机上出现“网络不可用”错误,而在模拟器上正常,这是一个常见问题。主要原因通常是鸿蒙的网络安全策略默认禁止HTTP明文请求(非HTTPS),真机环境比模拟器更严格。以下是排查和解决步骤,基于HarmonyOS的常见实践(适用于API version 6及以上)。
config.json中的网络权限可能未正确声明或生效。鸿蒙要求显式允许HTTP请求。在config.json的module部分添加deviceConfig,启用明文流量:
{
"module": {
"name": "entry", // 替换为你的模块名
"deviceConfig": {
"default": {
"network": {
"cleartextTraffic": true // 允许HTTP请求
}
}
},
"reqPermissions": [
{
"name": "ohos.permission.INTERNET" // 确保网络权限存在
}
]
}
}检查config.json中的权限:
reqPermissions包含ohos.permission.INTERNET。位置:在module对象内,例如:
"reqPermissions": [
{ "name": "ohos.permission.INTERNET" }
]在真机上测试网络:
检查代码中的URL:
http://example.com/api),避免使用localhost(真机中localhost指向设备自身)。示例代码(使用ohos.net.http):
import http from '@ohos.net.http';
let httpRequest = http.createHttp();
httpRequest.request(
"http://example.com", // 替换为你的URL,确保是公网可访问
{
method: http.RequestMethod.GET,
connectTimeout: 60000, // 增加超时时间
readTimeout: 60000
}, (err, data) => {
if (err) {
console.error('Error:', JSON.stringify(err)); // 打印详细错误
return;
}
console.info('Response:', JSON.stringify(data));
}
);console.error)捕获真机错误详情,如err.code(常见错误码:230表示网络不可用)。如果服务支持,改用HTTPS请求(推荐),避免配置cleartextTraffic:
https://...。在DevEco Studio中,连接真机调试:
使用HiLog或console输出日志:
import hilog from '@ohos.hilog';
hilog.info(0x0000, 'NetworkTest', 'Request started'); // 添加日志点http或网络相关关键字。常见错误码:
230:网络不可用(检查权限或安全策略)。202:请求超时(调整connectTimeout)。config.json未声明或权限未启用。
鸿蒙 HTTP 请求报 “网络不可用”,先排查基础项:1. 确认设备 / 模拟器联网(WiFi / 移动数据正常,能访问其他网络);2. 检查应用已配置 INTERNET 权限(module.json5/config.json 中声明 ohos.permission.INTERNET,Stage 模型需确认权限在 module 节点下);3. 排查网络代理 / 防火墙(关闭模拟器 / 设备的代理,避免拦截请求);4. 代码层面:检查请求 URL 是否正确(HTTPS 需确认证书适配,低版本鸿蒙可临时关闭 SSL 校验)、网络请求是否在异步线程执行(主线程执行会触发系统拦截)、添加网络状态监听(用 @ohos.net.connection 判断当前网络类型,无网时提示用户);5. 特殊场景:鸿蒙 4.0 + 需确认应用签名为调试签名,模拟器需重启或重新连接网络,真机需关闭 VPN / 网络限流。