鸿蒙应用开发从入门到入行
第七篇 - http网络请求
导读:在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
HarmonyOS - 网络请求概述
- 在应用开发中,少不了需要向云端发送请求进行交互,这就需要进行网络通信。在HarmonyOS中,把所有跟请求有关的能力全部放入了
NetworkKit
(系统内置网络服务工具包)里,因此用之前需要先导入 - 目前HarmonyOS支持如下几种方式网络请求
- http
- 通过HTTP发起一个数据请求。
- WebSocket
- 使用WebSocket建立服务器与客户端的双向连接。
- Socket
- 通过Socket进行数据传输。
- 网络连接管理
- 网络连接管理提供管理网络一些基础能力,包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。
- MDNS
- MDNS即多播DNS(Multicast DNS),提供局域网内的本地服务添加、移除、发现、解析等能力。
- http
- 本篇主要讲述http,因为咱们开发用的最多的就是它了
http请求 - 权限申请
-
注意:如果要使用网络请求,必须申请权限
-
哪个模块需要用,就在哪个模块的
module.json5
文件里进行申请 -
如果初学者目前的项目仅有一个模块,也即创建项目自动生成的
entry
模块- 具体路径为:
entry -> src -> main -> module.json5
- 具体路径为:
-
找到配置文件后,找到
requestPermissions
这一项-
若没有则创建,创建方法为,在此配置文件任意根节点处输入如下内容
"requestPermissions": [ ],
-
技巧:找个根节点输入req,
DevEco
即可出提示,按回车即可
-
-
requestPermissions
即配置你想申请的权限,格式如下"requestPermissions": [ { "name": "权限名1", "reason": "申请原因", "usedScene": "使用场景 }, { "name": "权限名2", "reason": "申请原因", "usedScene": "使用场景" } ],
- 其中
name
是必须填的且有固定格式,例如要申请网络权限则必须写:ohos.permission.INTERNET
, - reason和usedScene是可选的(这两个一个上架审核要用,一个对权限做更细致场景划分,目前我们暂时不用)
- 其中
-
我们目前仅需申请网络请求权限,因此做如下配置(技巧:随便输入内容关键字,DevEco都有提示,按回车即可)
"requestPermissions": [ { "name": "ohos.permission.INTERNET", } ]
-
注:
- 在最新版本中:即使不申请权限也能在预览器上发请求但会有警告。但若要模拟器或真机能请求,还请配置权限!
http请求 - 使用详解
基本使用
-
使用步骤
- 从@kit.NetworkKit中导入http命名空间。
- 调用createHttp()方法,创建一个HttpRequest对象。
- 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
- 按照实际业务需要,解析返回结果。
- 当该请求使用完毕时,调用destroy()方法主动销毁。
-
对应代码如下
// 1. 引入包名 import { http } from '@kit.NetworkKit'; // 2. 调用createHttp()方法,创建一个HttpRequest对象。 let httpRequest = http.createHttp(); // 3. 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。 // 总结:参数1为请求路径 参数2是一个对象,用来控制请求的相关配置, 参数3是请求完成的回调函数 httpRequest.request( // 请求地址 "url", { method: http.RequestMethod.POST, // 请求方式,可选,默认为http.RequestMethod.GET // 开发者根据自身业务需要添加header字段 header: [{ // 例如指定请求体类型 'Content-Type': 'application/json' }], // 请求携带的参数。一般情况下:post、put等请求传入对象,get请求传`key=value`形式字符串 extraData: "data to send", }, (err: BusinessError, data: http.HttpResponse) =>