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', // 公用部分的url//transformRequest:()=>{}, // 发送请求前的操作函数 // 知道别用出错有点难找//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工具包:
当需要多个url时则就需要发生变更了,使用构造传参方式就可以
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, // 请求超时时间headers:{}, // 头部数据timeoutErrorMessage: '连接超时'})}public static get(url: string,params:string='' ) {return AxiosUtils.link().get(url+'?'+params)}public static post(url: string,data:ResourceStr|object='' ) {return AxiosUtils.link().post(url,data)}
}
相关文章:

HarmonyOS---权限和http/Axios网络请求
网络请求(http,axios) 目录 一、应用权限管理1.1权限的等级1.2授权方式1.3声明权限的配置1.4如何向用户进行申请 二、内置http请求使用三、Axios请求使用(建议)3.1 使用方式一3.2 使用方式二(建议) 一、应用权限管理 应用权限保护…...

信号量SEM
前提 1.信号量的本质是一把计数器 2.申请信号本质就是预订资源 3.PV操作是原子的! 将一个公共资源当做整体访问-->锁 如果公共资源不当做整体使用,多进程可以并发的访问公共资源,但不是同一个区域,为了将资源均分,所以有了…...

828华为云征文 | 基于华为云Flexus云服务器X搭建部署——AI知识库问答系统(使用1panel面板安装)
🚀对于企业来讲为什么需要华为云Flexus X来搭建自己的知识库问答系统??? 【重塑知识边界,华为云Flexus云服务器X引领开源问答新纪元!】 🌟 解锁知识新动力,华为云Flexus云服务器X携…...

从零预训练一个tiny-llama#Datawhale组队学习Task2
完整的教程请参考:datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe (github.com) 这是Task2的学习任务 目录 Qwen-blog Tokenizer(分词器) Embedding(嵌入) RMS …...

【Linux探索学习】第二弹——Linux的基础指令(中)——夯实基础第二篇
Linux基础指令(上):【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇-CSDN博客 前言: 在前面我们已经讲解了一些常用的Linux的基础指令,那些当然是远远不够的ÿ…...
Python和QT哪个更适合嵌入式方向的上位机开发?
最近因为工作需要,需要做一个上位机用来处理收集到的数据,然后进行分析,最好有图标输出,当然还要考虑开发便捷,毕竟平时主要是嵌入式方向开发,核心技术栈主要是Linux和C语言,对于开始上位机并不…...

Unity实战案例全解析:RTS游戏的框选和阵型功能(5)阵型功能 优化
前篇:Unity实战案例全解析:RTS游戏的框选和阵型功能(4)阵型功能-CSDN博客 本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程 我只是对重要功能进行分析和做出笔记分享,并未无师自通&#x…...

Android compose 的基本环境搭建
1.创建项目 导入版本 1.gradle/libs.versions.toml [versions] accompanistPermissions "0.36.0" agp "8.5.0-beta01" coilCompose "2.7.0" constraintlayoutComposeVersion "1.0.1" hiltAndroid "2.51.1" hiltNavi…...
git | 合并 commit 的两种方法
比如你最近的 3 次提交分别为 A B C,你想将它们合并成 X。 方案一 使用 git rebase -i HEAD~3 进入编辑: pick 0148079 A pick 29cae72 B pick bf8572a C修改: r 0148079 A f 29cae72 B f bf8572a C:wq 保存进入 commit 编辑页面,输入 X …...

Grafana链接iframe嵌入Web前端一直跳登录页面的问题记录
概述 公司有个项目使用到Grafana作为监控界面,因为项目方的环境极其复杂,仅物理隔离的环境就有三四个,而且每个都得部署项目,今天在某个环境测试,查看界面遇到一个比较奇怪的Grafana问题,后面针对该问题进行跟踪分析并解决,故而博文记录,用于备忘。 问题 登录项目We…...

后端Java-SpringBoot整合MyBatisPlus步骤(超详细)
1.新建项目。 2.点击完上一步的next之后,选择pom.xml文件中的依赖。 3.点击pom文件进行项目初始化。 按照下面的俩步骤刷新一下maven ,让文件生效 4.新建一个application.yml文件 5. 新建一个数据库mp,在数据库中新建一张user表 6.连接数据…...

8609 哈夫曼树
### 思路 1. **选择最小权值节点**:在哈夫曼树构建过程中,选择两个权值最小且父节点为0的节点。 2. **构建哈夫曼树**:根据权值构建哈夫曼树,确保左子树权值小于右子树权值。 3. **生成哈夫曼编码**:从叶子节点到根节点…...

docker的harbor仓库登录问题
目录 一、问题描述 二、证书信任问题 三、DNS解析问题 四、解决 参考链接:Docker login Harbor报错解决:Error response from daemon: Get https:..-阿里云开发者社区 一、问题描述 问题: 挂机或者挂机重启之后harbor登录不上 查看日…...
ENV | docker 安装使用(简单实操版)
1. 详细步骤 1.1 安装 sudo apt update sudo apt install docker.io1.2 验证(可跳过) docker -v1.3 使用 1.3.1 拉取镜像 # 镜像源,如使用腾讯云服务器,可使用 https://mirror.ccs.tencentyun.com docker pull xxx1.3.2 运行…...

【Golang】深入解读Go语言中的错误(error)与异常(panic)
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
DMDSC更换DCR和VOTE磁盘
DMDSC更换DCR和VOTE磁盘 为了提高DMDSC集群运行速度和节点之间通信协调的效率,需要将运行在机械盘上的dcr和vote磁盘替换到SSD高效磁盘上。将原来200M的dcr和vote机械磁盘,换成500M的SSD高效磁盘。 磁盘替换规划信息如下所示: 信息说明 替…...

国产化框架PaddleYOLO结合Swanlab进行作物检测
1. 项目介绍 粮食安全,作为人类生存与发展的基石,始终是全球关注的焦点。它不仅仅关乎粮食的充足供应,更涉及粮食的质量安全、营养健康以及可持续生产等多个维度。在全球化、气候变化和资源环境约束日益加剧的背景下,如何确保粮食…...
Linux编译部署PHP环境
1.准备工作 安装前我们需要设置防护墙,开放端口,更新yum源 # 1.防火墙 systemctl status firewalld 看到active(running)就意味着防火墙打开了 systemctl stop firewalld 看到inactive(dead)就意味着防火墙关闭了 systemctl start fire…...
Win11禁止搜索栏查找互联网内容
禁止任务栏和开始菜单的搜索栏查找互联网内容的方法如下: 使用组策略:WinR键,或菜单框,输入gpedit.msc回车,启动本地组策略编辑器。使用左侧的边栏导航到“计算机配置”>“管理模板”>“Windows组件”>“搜索…...
dig和nmap的区别
dig和nmap是两种在网络管理和安全领域广泛使用的工具,它们在功能、用途和原理上存在显著差异。 dig 定义与功能: dig(Domain Information Groper)是一个用于查询DNS(域名系统)信息的命令行工具。它允许用…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...

如何把工业通信协议转换成http websocket
1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时…...