鸿蒙发请求靠什么
鸿蒙用系统自带的 @ohos.net.http 模块发 HTTP 请求,不用引第三方库。它支持 GET、POST、自定义头,返回 Promise,可以 async/await。
网络请求走系统模块,简单直接。
这篇从发一个 GET 开始,把整套请求流程走一遍。
写网络请求最怕两件事:一是忘了加 INTERNET 权限,跑起来直接报权限错误;二是用明文 HTTP,在高版本系统上被默认拦截。这两点踩过一次就记住。请求回来的 JSON 要在解析前先判状态码,200 才是真成功,401、403、500 都要单独处理,别一律当成成功往界面上塞数据,否则一个错误页就变成空白。
GET 拉数据
import http from '@ohos.net.http';
async fetchList() {
const req = http.createHttp();
const res = await req.request(
'https://api.example.com/list',
{ method: http.RequestMethod.GET }
);
console.log(res.result);
req.destroy();
}
- createHttp建请求。
- request发请求 await 结果。
- destroy用完销毁。
每次 request 之前先建一个 http 实例,别复用太久;用完 destroy 释放底层连接。超时用 connectTimeout、readTimeout 设一下,网络不好时别傻等。请求头里带好 Authorization,后端才能认出登录态。响应回来要先看 responseCode,不是 200 就要单独处理。
返回结果的 result 可能是字符串也可能是对象,按后端约定来。
POST 带参数提交
POST 把数据放在 extraData 里,头里声明 JSON:
await req.request('https://api.example.com/login', {
method: http.RequestMethod.POST,
header: { 'Content-Type': 'application/json' },
extraData: JSON.stringify({ user: 'tom', pwd: '123' })
});
GET 的查询参数直接拼在 URL 后面,或者用 options.params;POST 的表单字段要 URL 编码,JSON 请求体则要序列化成字符串。登录、提交评论这类写操作一定要 POST,别用 GET 把参数挂在地址栏,容易被日志和缓存看到。
HTTPS 与权限
网络请求要在 module.json5 里声明 ohos.permission.INTERNET。正式环境只跑 HTTPS,别用明文 HTTP。
异常与超时
请求要包 try/catch,网络抖动、超时都得兜住,别让页面白屏。
成功后记得先解析 JSON 再更新界面;解析失败多半是后端改了字段名,得在开发时把日志打出来。高频请求要加防抖,输入框联想别每敲一键就发一次,等用户停一下再发。
try { await fetchList() } catch (e) { console.error('网络失败', e) }
实战:拉列表渲染
拉到 JSON 后存进状态变量,页面自动刷新。
@State list: object[] = [];
async load() {
const res = await fetchList();
this.list = JSON.parse(res.result);
}
小结
鸿蒙网络请求就三步:createHttp、request、destroy。GET 拉数据、POST 带参数,记得加 INTERNET 权限、走 HTTPS、兜异常。