鸿蒙 5.0+ 网络通信实战:HTTP/HTTPS 请求与数据解析(认证 16% 考点版)
本文详细介绍了鸿蒙开发中的网络通信模块,重点讲解了HTTP/HTTPS请求的实现方法。内容包括:1)配置网络权限的基础步骤;2)GET/POST请求的代码实现与注意事项;3)JSON/XML数据解析技巧;4)网络请求工具类封装方法;5)三种存储方式的对比。文章特别标注了鸿蒙开发者认证考试中的高频考点,如网络权限配置、HTTPS请求、状态码含义等,并提供了可直接复用的代码示例。最后介绍了相关培训班级
各位鸿蒙小伙伴!今天咱们搞定 网络通信—— 这可是鸿蒙开发者认证里占 16% 的重点模块,不管是拉接口、传数据还是解析 JSON,做应用根本绕不开!全程保姆级步骤,代码直接复制能用,考点标红记牢!
一、先搞懂核心:HTTP/HTTPS 请求基础(认证高频考)
鸿蒙网络请求主要用 @ohos.net.http 模块,支持 GET/POST/PUT/DELETE 等常用方法,HTTPS 默认支持(不用额外配置证书,超方便!)
步骤 1:配置网络权限(必须先做!)
首先在 module.json5 里加权限,否则请求会报错(认证必考点!)
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
"reason": "需要访问网络获取数据",
"usedScene": {
"abilities": ["*"],
"when": "always"
}
}
]
}
}
步骤 2:GET 请求实战(拉取 JSON 数据)
用免费测试接口 https://jsonplaceholder.typicode.com/users 拉取用户列表,步骤拆解得明明白白:
import http from '@ohos.net.http';
import promptAction from '@ohos.promptAction';
@Entry
@Component
struct HttpGetPage {
@State userList: Array // 存用户列表的状态
build() {
Column() {
Button('发送GET请求拉取用户列表')
.onClick(async () => {
try {
// 1. 创建HTTP客户端实例
const httpClient = http.createHttp();
// 2. 配置请求参数(可选,比如超时时间)
const requestConfig = {
method: http.RequestMethod.GET, // 请求方法
connectTimeout: 60000, // 超时时间60秒
header: {
'Content-Type': 'application/json' // 请求头
}
};
// 3. 发送请求(测试接口:拉取10条用户数据)
const response = await httpClient.request(
'https://jsonplaceholder.typicode.com/users',
requestConfig
);
// 4. 处理响应结果(状态码200表示成功)
if (response.responseCode === 200) {
// 把响应数据(字符串)转成JSON对象
this.userList = JSON.parse(response.result.toString());
promptAction.showToast({ message: `拉取成功!共${this.userList.length}条数据` });
} else {
promptAction.showToast({ message: `请求失败,状态码:${response.responseCode}` });
}
// 5. 销毁客户端(避免内存泄漏,认证考点!)
httpClient.destroy();
} catch (err) {
promptAction.showToast({ message: `请求出错:${err.message}` });
}
})
// 展示拉取到的用户列表
List() {
ForEach(this.userList, (user) => {
ListItem() {
Column() {
Text(`用户名:${user.name}`)
Text(`邮箱:${user.email}`)
Text(`电话:${user.phone}`)
}
.padding(10)
.borderBottom(1, Color.Gray)
}
})
}
.width('100%')
.marginTop(20)
}
.padding(20)
}
}
⚠️ 认证考点标红
- 网络权限 ohos.permission.INTERNET 必须配置,否则无法发起请求;
- httpClient 用完必须调用 destroy(),否则会导致内存泄漏;
- HTTPS 请求无需额外配置证书,鸿蒙默认信任系统根证书;
- 响应数据 response.result 是 ArrayBuffer 类型,需用 toString() 转成字符串再解析。
二、POST 请求实战(提交表单 / JSON 数据)
POST 用于提交数据(比如登录、新增数据),咱们分 “提交 JSON” 和 “提交表单” 两种场景讲:
场景 1:提交 JSON 数据
Button('发送POST请求(提交JSON)')
.onClick(async () => {
try {
const httpClient = http.createHttp();
const requestConfig = {
method: http.RequestMethod.POST,
header: {
'Content-Type': 'application/json' // 告诉服务器是JSON格式
},
// 请求体:JSON对象转成字符串
extraData: JSON.stringify({
title: '鸿蒙网络请求实战',
body: '这是用POST提交的JSON数据',
userId: 1
})
};
// 测试接口:提交数据后返回新增的内容
const response = await httpClient.request(
'https://jsonplaceholder.typicode.com/posts',
requestConfig
);
if (response.responseCode === 201) { // 201表示创建成功
const result = JSON.parse(response.result.toString());
promptAction.showToast({ message: `提交成功!新增ID:${result.id}` });
} else {
promptAction.showToast({ message: `提交失败:${response.responseCode}` });
}
httpClient.destroy();
} catch (err) {
promptAction.showToast({ message: `出错:${err.message}` });
}
})
场景 2:提交表单数据(x-www-form-urlencoded)
Button('发送POST请求(提交表单)')
.onClick(async () => {
try {
const httpClient = http.createHttp();
const requestConfig = {
method: http.RequestMethod.POST,
header: {
'Content-Type': 'application/x-www-form-urlencoded' // 表单格式
},
// 表单数据:用&拼接键值对
extraData: 'username=鸿蒙小能手&password=123456&rememberMe=true'
};
// 模拟登录接口(测试用)
const response = await httpClient.request(
'https://jsonplaceholder.typicode.com/posts',
requestConfig
);
if (response.responseCode === 201) {
promptAction.showToast({ message: '表单提交成功!' });
}
httpClient.destroy();
} catch (err) {
promptAction.showToast({ message: `出错:${err.message}` });
}
})
⚠️ 认证考点标红
- Content-Type 必须和提交的数据格式匹配:
-
- JSON 格式:application/json(需用 JSON.stringify() 转字符串);
-
- 表单格式:application/x-www-form-urlencoded(键值对用 & 拼接);
- POST 请求的响应状态码:201 表示 “创建成功”,200 表示 “请求成功”(认证会考状态码含义)。
三、数据解析实战:JSON/XML(认证必考)
鸿蒙网络请求返回的数据大多是 JSON(少数 XML),咱们重点讲 JSON 解析,附带 XML 解析方法:
1. JSON 解析(最常用)
上面的例子已经用到了 JSON.parse(),这里讲复杂 JSON 解析(嵌套对象 / 数组):
// 模拟复杂JSON响应数据
const complexJson = `{
"code": 200,
"message": "success",
"data": {
"user": {
"id": 1,
"name": "鸿蒙开发者",
"address": {
"city": "深圳",
"street": "科技园路"
}
},
"hobbies": ["编程", "爬山", "看文档"]
}
}`;
// 解析复杂JSON
Button('解析复杂JSON')
.onClick(() => {
const result = JSON.parse(complexJson);
// 取嵌套对象的属性
const userName = result.data.user.name;
const city = result.data.user.address.city;
const firstHobby = result.data.hobbies[0];
promptAction.showToast({
message: `姓名:${userName},城市:${city},爱好:${firstHobby}`
});
})
2. XML 解析(少用但认证可能考)
需要导入 @ohos.xml.parser 模块,解析 XML 字符串:
import xml from '@ohos.xml.parser';
// 模拟XML响应数据
const xmlData = `
00 <message>success</message>
>
1 </name>
</user>
`;
Button('解析XML数据')
.onClick(async () => {
try {
// 创建XML解析器
const parser = new xml.SaxParser((event) => {
switch (event.eventType) {
case xml.EventType.START_ELEMENT:
console.log(`开始标签:${event.elementName}`);
break;
case xml.EventType.CHARACTERS:
// 取标签内的文本内容
if (event.elementName === 'name') {
promptAction.showToast({ message: `XML解析结果:${event.text}` });
}
break;
case xml.EventType.END_ELEMENT:
console.log(`结束标签:${event.elementName}`);
break;
}
});
// 开始解析
await parser.parseString(xmlData);
} catch (err) {
promptAction.showToast({ message: `XML解析出错:${err.message}` });
}
})
⚠️ 认证考点标红
- JSON 解析核心:JSON.parse()(字符串→JSON 对象)、JSON.stringify()(JSON 对象→字符串);
- XML 解析需用 SaxParser,通过监听事件(START_ELEMENT/CHARACTERS/END_ELEMENT)获取数据;
- 解析嵌套 JSON 时,要注意空值判断(比如 result?.data?.user?.name,避免报错)。
四、网络请求进阶:拦截器 + 错误处理(实战必备)
实际开发中需要统一处理请求头、Token、错误,这里给一套可复用的工具类:
步骤 1:封装网络请求工具类
// utils/HttpUtil.ets
import http from '@ohos.net.http';
import promptAction from '@ohos.promptAction';
// 基础URL(实际项目中可配置不同环境)
const BASE_URL = 'https://jsonplaceholder.typicode.com';
// 封装请求方法
export class HttpUtil {
// 通用请求方法
static async request(url: string, method: http.RequestMethod, data?: any, header?: any) {
try {
const httpClient = http.createHttp();
// 统一配置请求头(比如添加Token)
const defaultHeader = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + '你的Token' // 实际项目中从Preferences读取
};
const requestConfig = {
method,
header: { ...defaultHeader, ...header }, // 合并默认头和自定义头
extraData: data ? JSON.stringify(data) : ''
};
// 拼接完整URL
const fullUrl = BASE_URL + url;
const response = await httpClient.request(fullUrl, requestConfig);
// 统一处理响应
if (response.responseCode === 200 || response.responseCode === 201) {
return JSON.parse(response.result.toString());
} else if (response.responseCode === 401) {
promptAction.showToast({ message: 'Token过期,请重新登录' });
// 跳转到登录页(实际项目中实现)
} else {
promptAction.showToast({ message: `请求失败:${response.responseCode}` });
return null;
}
} catch (err) {
promptAction.showToast({ message: `网络错误:${err.message}` });
return null;
}
}
// GET请求快捷方法
static get(url: string, header?: any) {
return this.request(url, http.RequestMethod.GET, null, header);
}
// POST请求快捷方法
static post(url: string, data?: any, header?: any) {
return this.request(url, http.RequestMethod.POST, data, header);
}
}
步骤 2:使用封装后的工具类
// 导入工具类
import { HttpUtil } from '../utils/HttpUtil';
Button('用工具类发送GET请求')
.onClick(async () => {
// 直接调用封装好的get方法,无需重复写配置
const result = await HttpUtil.get('/users');
if (result) {
this.userList = result;
promptAction.showToast({ message: `拉取成功!共${this.userList.length}条数据` });
}
})
Button('用工具类发送POST请求')
.onClick(async () => {
const data = { title: '封装工具类测试', body: '真方便!', userId: 1 };
const result = await HttpUtil.post('/posts', data);
if (result) {
promptAction.showToast({ message: `新增成功,ID:${result.id}` });
}
})
⚠️ 认证考点标红
- 实际开发中建议封装网络工具类,统一处理请求头、Token、错误;
- Token 通常存储在 Preferences 中,请求时从本地读取(认证会考 “Token 存储 + 网络请求结合”);
- 常见错误码含义(认证必背):
-
- 401:未授权(Token 过期 / 无效);
-
- 404:接口不存在;
-
- 500:服务器内部错误;
-
- 403:权限不足。
五、三种存储方式对比(认证必背)
|
网络请求方式 |
适用场景 |
核心 API / 方法 |
认证考点频次 |
|
GET |
拉取数据(查询、列表) |
http.RequestMethod.GET、JSON.parse() |
必考 |
|
POST |
提交数据(新增、登录) |
http.RequestMethod.POST、extraData |
必考 |
|
工具类封装 |
实际项目开发(统一管理) |
封装request方法、统一处理响应 |
高频 |
|
XML 解析 |
兼容旧系统接口 |
xml.SaxParser、事件监听 |
常考 |
六、班级
目前班级正火热招募学员!加入班级:https://developer.huawei.com/consumer/cn/training/classDetail/6b5617ffd9264d6daa2f3d9250204f1e?type=1%3Fha_source%3Dhmosclass&ha_sourceId=89000248,跟着系列文章系统学,快速掌握鸿蒙开发核心技能,冲刺 HarmonyOS 应用开发者认证!无论你是零基础入门,还是在职开发者提升,都能在班级中收获成长,抢占鸿蒙生态人才红利~
更多推荐



所有评论(0)