零基础学鸿蒙开发--第九篇--网络请求

12. ⽹络请求

鸿蒙系统提供了 http 模块 ⽤于发送 http 请求,另外, OpenHarmony社区基于该模块将前端开发中常⽤的⽹络请 求库 axios 移植到了鸿蒙系统,因此我们也可以在鸿蒙系统中使⽤ axios 发送 http 请求,下⾯重点为⼤家介绍 axios 的⽤法。
12.1. 准备⼯作
准备接⼝⽂档,需要连同⼀个局域⽹
12.1.2. 申请⽹络访问权限
默认情况下,应⽤只能访问有限的系统资源,若应⽤需要访问⼀些受保护的数据(照⽚、通讯录、位置等)或者功 能(打电话、发短信、联⽹等),需要先申请相应的权限。鸿蒙系统的权限列表可参考 官⽅⽂档 。
权限的申请可分为如下两步
第⼀步:声明所需权限
开发者需要在 entry/src/main/module.json5 ⽂件中声明所需权限,具体格式如下

{

 "module": {

 ......

 "requestPermissions": [

   {

     "name": 'ohos.permission.******'

   }

  ]

 }

}

第⼆步:申请授权

  • 如果⽬标权限的授权⽅式为system_grant,开发者在完成第⼀步后,系统会在安装应⽤时⾃动为其进⾏权限预授予,开发者不需要做其他操作即可使⽤权限。

  • 如果⽬标权限的授权⽅式为是user_grant,开发者在完成第⼀步后,还需要在应⽤运⾏时弹窗请求⽤户授权,具体操作可参考官⽅⽂档

由于⽹络访问权限的授权⽅式为system_grant,因此只需完成第⼀步即可,具体内容如下

javascript 复制代码
{

 "module": {

 ......

 "requestPermissions": [

     {

       "name": 'ohos.permission.INTERNET'

     }

   ]

 }

}

12.2. 安装axios
axios 相当于鸿蒙应⽤项⽬的⼀个第三⽅库,鸿蒙应⽤项⽬使⽤ ohpm管理(包括安装、卸载等)第三⽅库。除了 axios ,还有很多其他的第三⽅库可供开发者使⽤,所有的第三⽅库都收录在 OpenHarmony 三⽅库中⼼仓 中。
12.2.1. 配置环境变量
为⽅便执⾏ ohpm 命令,需先将 ohpm 的安装⽬录添加到操作系统的 Path 环境变量下,具体操作如下
第⼀步:查看 ohpm 安装⽬录
打开 Deveco Studio 设置界⾯,搜索 ohpm

第⼆步:配置环境变量
将上述⽬录添加到 Path 环境变量

完成上述环境变量的配置之后,便可在任意⽬录下执⾏ ohpm 命令了。
12.2.2. 安装 axios
点击 Deveco Studio 底部的 Terminal 选项卡,启动终端

javascript 复制代码
ohpm i @ohos/axios

12.3. axios 快速⼊⻔
第⼀步:导⼊ axios

javascript 复制代码
import axios from '@ohos/axios'

第⼆步:创建 axios 实例

javascript 复制代码
const instance = axios.create({
 baseURL: 'http://<ip>:<port>',
 timeout: 2000
})

注意: 需要根据实际情况替换上述的 ip 地址和端⼝号
第三步:发送http请求

创建axios实例后,便可通过该实例的api来发送各种http请求,常⽤的api定义如下

|----------------------------------|----------------|
| api | 功能 |
| get(url, config?): Promise | 发送GET请求 |
| delete(url, config?): Promise | 发送DELETE请求 |
| post(url,data?,config?): Promise | 发送POST请求 |
| put(url,data?,config?): Promise | 发送PUT请求 |

第四步:获取请求结果

上述api的返回值类型均为Promise,Promise是JavaScript中⽤于表示异步操作结果的对象,若操作成功,其中会包含具体结果,若操作失败,其会包含错误的原因。在实际应⽤中,开发者可以通过该对象的then()⽅法来处理操作成功时的结果,通过catch()⽅法来处理操作失败的情况,例如

javascript 复制代码
get(...)
 .then((response:AxiosResponse)=>{
 //处理请求成功的结果
 ...
 })
 .catch((error:AxiosError)=>{
 //处理请求失败的错误
 ...
 })

AxiosResponse是axios定义的响应结果类型,默认情况下,通过axios发送的所有请求,其成功的响应结果都是该类型。其包含的属性如下

javascript 复制代码
{
 //服务器返回的响应结果
 data: {},
 //服务器响应的 HTTP 状态码
 status: 200,
 //服务器响应的 HTTP 状态信息
 statusText: 'OK',
 // 服务器响应头
 headers: {},
 //axios请求的配置信息
  config: {},
  //⽣成此响应的请求信息
  request: {}
}

因此, response.data 才是服务器返回的真实数据,具体处理逻辑如下

javascript 复制代码
get(...)
 .then((response:AxiosResponse)=>{
 //获取服务器返回的数据
     let data = response.data;
 //处理服务器返回的数据
 ...
 })
 .catch((error:AxiosError)=>{
 //处理请求失败的错误
 ...
 })

12.4. axios 拦截器
axios 可以分别为请求和响应配置拦截器,请求拦截器可在请求发送前进⾏拦截,响应拦截器可以在 then() 或 者 catch() ⽅法执⾏前进⾏拦截,如下图所示

在拦截器中,开发者可以对请求的参数或者响应的结果做⼀些统⼀的处理,⽐如在请求拦截器中统⼀为所有请求增 加 token 这⼀ Header ,在响应拦截器中统⼀处理错误响应。
拦截器的配置⽅式如下
请求拦截器

javascript 复制代码
// 添加请求拦截器
instance.interceptors.request.use((config:InternalAxiosRequestConfig) => {
 // 对请求数据做点什么
 return config;
}, (error:AxiosError) => {
 // 对请求错误做些什么
 return Promise.reject(error);
});

响应拦截器

javascript 复制代码
// 添加响应拦截器
instance.interceptors.response.use((response:AxiosResponse)=> {
 // 对响应数据做点什么
 return response;
}, (error:AxiosError)=> {
 // 对响应错误做点什么
 return Promise.reject(error);
});

最后,如果这篇文章对你有所帮助请 "点赞 收藏+关注" ,感谢支持!祝您编码愉快

相关推荐
MarkHD22 分钟前
第十八天 WebView深度优化指南
华为·harmonyos
css趣多多31 分钟前
案例自定义tabBar
前端
别说我什么都不会1 小时前
鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP
操作系统·harmonyos
姑苏洛言2 小时前
DeepSeek写微信转盘小程序需求文档,这不比产品经理强?
前端
林的快手2 小时前
CSS列表属性
前端·javascript·css·ajax·firefox·html5·safari
feiniao86512 小时前
2025年华为手机解锁BL的方法
华为·智能手机
匹马夕阳2 小时前
ECharts极简入门
前端·信息可视化·echarts
API_technology3 小时前
电商API安全防护:JWT令牌与XSS防御实战
前端·安全·xss
yqcoder3 小时前
Express + MongoDB 实现在筛选时间段中用户名的模糊查询
java·前端·javascript
塞尔维亚大汉3 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【I3C】
harmonyos·领域驱动设计