当前位置: 首页 > news >正文

HarmonyOS---权限和http/Axios网络请求

网络请求(http,axios)

目录

  • 一、应用权限管理
    • 1.1权限的等级
    • 1.2授权方式
    • 1.3声明权限的配置
    • 1.4如何向用户进行申请
  • 二、内置http请求使用
  • 三、Axios请求使用(建议)
    • 3.1 使用方式一
    • 3.2 使用方式二(建议)


一、应用权限管理

应用权限保护的对象分数据和功能的:

  • 数据:个人(照片,通讯录,日历,位置)、设备(标识码,相机,麦克风)

  • 功能:设备(摄像头/麦克风、电话、联网)、应用(悬浮窗、快捷方式、唤起第三方应用、后台运行)

1.1权限的等级

system_core: 该等级提供应用服务操作系统的 - 核心能力
system_basic:该等级提供应用服务的 - 基础服务
normal: 普通的基本应用:默认

1.2授权方式

system_grant:系统授权
指的是系统类型的权限,应用被允许访问的数据不会涉及到用户或设备的敏感信息
安装应用是,应用会询问系统,系统会自动进行授权。
user_grant:用户授权
指的是涉及用户隐私或敏感数据的,如果出现问题,是不可控的。
应用安装后,运行时,会指定弹窗,询问用户是否允许获取权限。

授权申请

1.3声明权限的配置

entry/src/main/module.json5 配置文件中,声明权限:

例:当不需要用户确认和用户确认运行都需要在requestPermissions[]中进行配置:1. 不需要用户确认:{"name": "ohos.permission.INTERNET"  //权限名称:网络},
2. 用户确认 (当需要用户确认时,填写配置信息会有提示,不填则报错)
例:在卡片Call机制中也用到了,保持后台应用:
格式:{"name": "ohos.permission.LOCATION", //定位"reason": "$string:reason_loc",      //描述申请的原因:user_grant时,必填项,因为需要国际化需要在语言文件中设置才可以"usedScene": {                       //描述权限使用的场景:user_grant时,必填项"abilities": [ "EntryAbility" ],   //标识需要使用该权限的 Ability"when": "always"                   //标识使用的时机:inuse:只允许前台, always:前后台都允许}

1.4如何向用户进行申请

:定位
import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; //权限控制管理onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {//唤醒用户授权窗口,只有在user_grant情况下有效try{//创建一个权限管理对象const manager = abilityAccessCtrl.createAtManager()//基于管理对象,申请用户授权manager.requestPermissionsFromUser( this.context, ["ohos.permission.LOCATION","ohos.permission.APPROXIMATELY_LOCATION",...] )}catch(err){promptAction.showToast({message:'获取位置失败!'})}hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');}

扩展:请求方式
GET:
短文本请求,是一种不安全的请求,所有的信息都暴露在地址栏中。
内容的上限是255个字节。
通常都是直接打开网址、超链接a它们使用。
POST:
长文本请求,是一种安全的请求,基于http超文本传输协议的。
数据信息是通过TCP/IP请求协议进行处理的,用户不可见。
数据上限:2MB
如今,我们有一个RestFul请求风格定义,它扩展了更多的请求方式:并不是所有后端服务器都支持

PUT:本质还是post请求。DELETE:本质还是get请求。

二、内置http请求使用

可能会存在个版本不兼容问题:建议使用Axios

在这里插入图片描述

1.开启网络权限: 'ohos.permission.INTERNET'
2.导包: import http from '@ohos.net.http'
3.请求://创建网络请求对象const httpRequest:http.HttpRequest = http.createHttp()// 方式一:异步//异步方法:data就是响应回发的结果//httpRequest.request('url', {...}, (err,data)=>{})// 方式二: 同步//转同步操作try{const res:http.HttpResponse = await httpRequest.request('https://jsonplaceholder.typicode.com/users',{method: http.RequestMethod.GET}   //get请求方式:默认)//处理请求结果:得到一个json对象console.info('http===', res.responseCode)           //状态码console.info('http===', JSON.stringify(res.header)) //头部信息console.info('http===', JSON.stringify(res.result)) //数据结果}catch(err){console.info('http===', err)}finally{//不管成功还是失败,最终,始终关闭请求对象httpRequest.destroy()}
封装工具包格式:// 内置http
import http from '@ohos.net.http'
import promptAction from '@ohos.promptAction'export default class HttpUtils {// 青云客:(第三方)private static readonly path: string = 'http://api.qingyunke.com'// 美团:(个人)// https://atstudy-1253850831.cos.ap-shanghai.mygcloud.comstatic async httpRequest(url: string, method: http.RequestMethod = http.RequestMethod.GET,extraData: string | Object | ArrayBuffer = ''): Promise<http.HttpResponse> {const link = http.createHttp()let res: http.HttpResponse = {} as http.HttpResponsetry {res = await link.request(HttpUtils.path + url, {method: method, extraData: extraData})} catch (err) {promptAction.showToast({message: '网络请求异常' + JSON.stringify(err)})} finally {//不管成功还是失败,最终,始终关闭请求对象link.destroy()}return res//处理请求结果:得到一个json对象// console.info('http===', res.responseCode)           //状态码// console.info('http===', JSON.stringify(res.header)) //头部信息// console.info('http===', JSON.stringify(res.result)) //数据结果}
}

三、Axios请求使用(建议)

使用Axios需要安装ohpm中的 axios依赖或者在oh-package.json5 加入依赖
方式一:根据命令安装:ohpm install @ohos/axios
方式二:“@ohos/axios”:“^2.2.0”

3.1 使用方式一

直接调用get(),post(), 不建议使用,原因路径每次都是完整的,有重复性

:
开启网络权限: 'ohos.permission.INTERNET'
导包: import axios  from '@ohos/axios'
axios.get('url',{params:{}})
axios.post('url')

3.2 使用方式二(建议)

定义出来公用部分,若不相同可以在调用时进行覆盖

:
开启网络权限: 'ohos.permission.INTERNET'
导包: import axios  from '@ohos/axios'
// 1.公共部分const cont =  axios.create({baseURL:'https://atstudy-1253850831.cos.ap-shanghai.myqcloud.com', // 公用部分的urltransformRequest:()=>{}, // 发送请求前的操作函数transformResponse:()=>{}, // 接收结果timeout:3*1000, // 请求超时时间headers:{} // 头部数据})// 格式: 2.调用 cont.get() /  cont.post()// 此处使用的异步,也可以转为async同步cont.get('/lab-d3/harmonyOS/meituan/shop.json',{timeout:6*1000} // 重写超时时间).then((res: AxiosResponse) => {if (res.status == 200) { // 状态码res.data // 返回数据}}).catch((err: BusinessError) => {promptAction.showToast({ message: "get请求异常"})}).finally(() => {  })
Axios工具包:
import axios, { AxiosInstance } from '@ohos/axios'
export default class AxiosUtils {// 青云客:(第三方)private static readonly path: string = 'http://api.qingyunke.com'private static  link(): AxiosInstance {return axios.create({baseURL: AxiosUtils.path,timeout: 3 * 1000,transformRequest:()=>{}, // 发送请求前的操作函数transformResponse:()=>{}, // 接收结果timeout:3*1000, // 请求超时时间headers:{}, // 头部数据timeoutErrorMessage: '连接超时'})}public static get(url: string,params:ResourceStr|object='' ) {return AxiosUtils.link().get(url,{params:params})}public static post(url: string,data:ResourceStr|object='' ) {return AxiosUtils.link().post(url,data)}
}

http://www.mrgr.cn/news/34076.html

相关文章:

  • JMeter(需要补充请在留言区发给我,谢谢)
  • docker部署Stirling-PDF
  • es高级查询——多字段聚合
  • 75、Python之函数式编程:生成器的核心方法及更多使用场景
  • 文科生学pytorch——一些概念的解释
  • layui upload.render 设置文件名
  • 基于Python+SQLServer实现(界面)书店销售管理管理子系统
  • 关于在vue2中给el-input框的placeholder加样式
  • CPLD 工程师面试题
  • AI美女占领小红书,卷翻真人女网红
  • HTML5简介的水果蔬菜在线商城网站源码系列模板3
  • Oracle数据库高级技术解析与实战案例
  • 【AIGC】ChatGPT提示词助力高效文献处理、公文撰写、会议纪要与视频总结
  • 详解运行时安全检测神器:Falco
  • [leetcode]70_单词搜索
  • 如何将py文件打包成exe文件?---pyinstaller使用方法
  • Java面试篇基础部分- 锁详解
  • 【C++掌中宝】玩转C++标准输入输出(简洁明了)
  • JVM面试问题集
  • 【aider】aider使用ollama本地模型