鸿蒙发请求靠什么

鸿蒙用系统自带的 @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();
}
GET 速查
  • 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。

鸿蒙网络:手机通过发光波浪网线连接云端服务器机柜、数据包像光点沿线传输的蓝调插画
手机经发光网线连到云端机柜,数据像光点沿波浪传输。