【鸿蒙系统学习笔记】网络请求

一、介绍

资料来自官网:文档中心

网络管理模块主要提供以下功能:

  • HTTP数据请求:通过HTTP发起一个数据请求。
  • WebSocket连接:使用WebSocket建立服务器与客户端的双向连接。
  • Socket连接:通过Socket进行数据传输。

日常开发中HTTP请求使用会比较多,主要对HTTP请求进行总结记录

二、HTTP请求

场景:应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。

request接口开发步骤 :

  1. 从@ohos.net.http.d.ts中导入http命名空间。
  2. 调用createHttp()方法,创建一个HttpRequest对象。
  3. 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。
  4. 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
  5. 按照实际业务需要,解析返回结果。
  6. 调用该对象的off()方法,取消订阅http响应头事件。
  7. 当该请求使用完毕时,调用destroy()方法主动销毁。

2.1、开发网络权限。

在model.json5文件中的module模块下添加如下请求权限:

    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ],

2.2、使用HTTP请求

2.2.1、定义HTTP请求方法

在ets文件夹下新建model文件夹,在model内新建LoginModel文件,用来处理登录HTTP请求

model文件夹主要用来处理数据查询

具体代码👇


import http from '@ohos.net.http'
class LoginModel{
  baseUrl:string = 'http://127.0.0.1:8000'

  reqLogin(){
    return new Promise((resolve,reject) => {
      //1.创建http请求
      let httpRequest = http.createHttp()
      //2.发送请求
      httpRequest.request(
        `${this.baseUrl}/saas-api/user/login`,
        {
          method:http.RequestMethod.POST,
          extraData:{'username':'admin','password':'admin'},
          header:{
            'X-Tenant-ID':'1',
            'Content-Type': 'application/json'
          },
          connectTimeout:10000,
          readTimeout:10000
        },
      ).then(resp => {
        if(resp.responseCode === 200){
          //查询成功
          console.log('http--成功',resp.result)
          resolve(JSON.parse(resp.result.toString()))

        }else{
          console.log('http--失败',resp.result)
          reject('查询失败')
        }
      })
        .catch(error => {
          console.info('error:'+JSON.stringify(error))
          reject('查询失败')
        })
    })
  }
}

const loginModel = new LoginModel()
export default loginModel as LoginModel

2.2.2、在页面中使用HTTP封装的请求方法

import LoginModel from '../model/LoginModel'
@Entry
@Component
struct HttpPage {
  @State message: string = 'Hello'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button('http请求')
          .onClick(() => {
            LoginModel.reqLogin()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

在页面中点击 'http请求' 按钮时,日志会打印成功的结果

三、第三方库axios 

3.1、下载和安装ohpm

具体可查看官网指引:文档中心

3.1.1、下载ohpm工具包,点击链接获取。

3.1.2、解压工具包,执行初始化命令

3.1.3、将ohpm配置到环境变量中。

配置好后,打开命令窗口输入 ohpm -v,便能看到版本号

3.2、下载和安装axios

3.2.1、下载axios

进入项目目录,输入下面命令

ohpm install @ohos/axios

安装成功后,在项目的oh-package.json5文件内可以查看到安装的库,在oh_modules下也能看到安装的安装包

3.2.2、开发网络权限

在model.json5文件中的module模块下添加如下请求权限:

    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ],

备注:HTTP请求时已经设置了请求权限,此处就不重复设置了

推荐:鸿蒙提供的第三方库地址OpenHarmony三方库中心仓

3.3、使用axios

3.3.1、定义axios请求方法

在model内新建LoginModel文件LoginModelAxios文件,用来处理登录axios请求

import axios from '@ohos/axios'
class LoginModelAxios{
  baseUrl:string = 'http://127.0.0.1:8000'

 async reqLogin(){
   let resp =await axios.post(
     `${this.baseUrl}/saas-api/user/login`,
     {username:'admin',password:'admin'},
     {
       headers:{
         'X-Tenant-ID':'1'
       }
     }
    )
   if(resp.status === 200){
     console.log('axios--成功',JSON.stringify(resp.data))
     return resp.data
   }
   //查询失败
   console.log('axios--失败',JSON.stringify(resp))
  }
}

const loginModelAxios = new LoginModelAxios()
export default loginModelAxios as LoginModelAxios

3.3.2、在页面中使用axios封装的请求方法 

import LoginModel from '../model/LoginModel'
import loginModelAxios from '../model/LoginModelAxios'
@Entry
@Component
struct HttpPage {
  @State message: string = 'Hello'

  build() {
    Row() {
      Column({space:8}) {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button('http请求')
          .onClick(() => {
            LoginModel.reqLogin()
          })
        Button('axios请求')
          .onClick(() => {
            loginModelAxios.reqLogin()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

在页面中点击 'axios请求' 按钮时,日志会打印成功的结果 

最后:👏👏😊😊😊👍👍 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/401573.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Skywalking开发分布式监控(三)

回顾上期的问题,当我们搭建完成Skywalking的搭建,顺利完成应用监控之后,就会面临一类问题,怎么利用获取的监控数据,包括三方面: 1 应用的Trace和SW收集Service/Endpoint不一定完全一致,可能定位…

【快速上手QT】05-绘画Paint

我们写一个QT程序,说实话,很难昧着良心说这个QT界面很好看(技术高超的小伙伴请忽略我这句话)。但是我们可以使用绘画事件来弥补一下“相貌丑陋”的这个缺点。 paintEvent 我们可以对主界面进行绘图,从而达到美化界面…

js设计模式:计算属性模式

作用: 将对象中的某些值与其他值进行关联,根据其他值来计算该值的结果 vue中的计算属性就是很经典的例子 示例: let nowDate 2023const wjtInfo {brithDate:1995,get age(){return nowDate-this.brithDate}}console.log(wjtInfo.age,wjt年龄)nowDate 1console.log(wjtInf…

【UI自动化】使用poco框架进行元素唯一定位

直接选择: 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择: 3.poco(text/name).parent().child()[0].click()正则表达式: 4.listpoco(textMatches".*ETF")今天主要想记录下…

操作系统导论-课后作业-ch19

1. 本书在第6章中有过介绍,gettimeofday函数最多精确到us,并且大致精确(并不完全精确),需要多迭代几次减少误差,循环次数太多也会导致结束时间小于开始时间(即回滚)的现象&#xff…

Kaggle实践之《Home Credit Default Risk》的逐步优化

记录下每一次的改进及其score。 1、只用训练集的特征简单处理 特征只用训练集的特征,把string型的特征全部进行one-hot转化,然后随机1:4分成测试集训练集,模型也调参直接出结果。 最终的score是训练集80.13%、验证集76.33%、线上74.28%。 …

Java 注解机制解密并发编程的时间之谜:揭开Happens-Before的神秘面纱

优质博文:IT-BLOG-CN 一、简介 为什么需要happens-before原则: 主要是因为Java内存模型 , 为了提高CPU效率,通过工作内存Cache代替了主内存。修改这个临界资源会更新work memory但并不一定立刻刷到主存中。通常JMM会将编写的代码…

⭐北邮复试刷题LCR 052. 递增顺序搜索树__DFS (力扣119经典题变种挑战)

LCR 052. 递增顺序搜索树 给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。 示例 1: 输入:root [5,…

零基础学习8051单片机(十六)

继续学习8051单片机,本次通过观看视频在此学习8051单片机的中断系统 要掌握单片机中断系统的硬件结构和工作原理 掌握:中断系统的初始化编程以及中断服务子程序设计。 一、中断的基本过程图: 中断的响应和处理过程: 当中断提出…

Redis篇----第十三篇

系列文章目录 文章目录 系列文章目录前言一、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key是以某个固定的已知的前缀开头的,如果将它们全部找出来?二、如果有大量的 key 需要设置同一时间过期,一般需要注意什么?三、使用过 Redis 做异步队列么,你是怎么用的?四、使用…

Apache Doris 发展历程、技术特性及云原生时代的未来规划

文章目录 作者介绍 Apache Doris特性极简结构高效自运维高并发场景支持MPP 执行引擎明细与聚合模型的统一便捷数据接入 Apache Doris 极速 1.0 时代极速 关于 Apache Doris 开源社区基于云原生向量数据库 Milvus 的云平台设计实践作者介绍图书推荐 本文节选自《基础软件之路&am…

第六篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:深度解读Kaldi库个性化定制语音搜索引擎

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、数据准备示例代码四、特征提取示例代码五、声学模型训练示例代码六、语言模型训练示例代码七、解码示例代码八、评估和调优示例代码九、…

LeetCode | 寻找两个正序数组的中位数 Python C语言

Problem: 4. 寻找两个正序数组的中位数 文章目录 思路解题方法Code结果结果一些思考 思路 先合并,后排序,最后找中间轴。 解题方法 由解题思路可知 Code 这是python3的代码。 class Solution(object):def findMedianSortedArrays(self, nums1, num…

分享Video.js观看Web视频流

界面效果 HTML结构 <div class"homePopup" ><div class"search_box animate__animated animate__fadeInDown" style"display: none;"><div class"van-search" style"background: rgba(0, 0, 0, 0);">&…

【云原生】Docker consul的容器服务更新与发现

目录 什么是服务注册与发现 什么是consul consul提供的一些关键特性&#xff1a; consul 部署 consul服务器 1. 建立 Consul 服务 设置代理&#xff0c;在后台启动 consul 服务端 2. 查看集群信息 查看members状态 查看集群状态 3. 通过 http api 获取集群信息 regi…

SpringBoot指定外部环境配置

nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar /usr/local/xxxx.jar --spring.profiles.activeprod > system.log 2>&1 & --spring.profiles.activeprod修改的是多环境配置中内部application.properties里的spring.profiles.active值 -Dspring.config…

新手初期交易是盈利的,等熟练了却开始亏损了?

许多个人投资者涌入市场&#xff0c;初衷是期望能实现暴利并创造奇迹。梦想是美好的&#xff0c;追求暴利也无可非议&#xff0c;但最担心的是一开始就设定了不切实际的目标。例如&#xff0c;他们可能认为&#xff0c;若一年内不能赚取五倍或十倍的收益&#xff0c;就等于失败…

【AI大语言模型】ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

Android13 编译ninja failed with: exit status 137

描述 现象很奇怪&#xff0c;主机是ubuntu 18.04&#xff0c; 内存有32G&#xff0c;并且系统中有两份Android13代码&#xff0c; 有一份编译正常&#xff0c;另外一份编译不正常&#xff0c;一度以为是因为下载源码不齐全导致&#xff0c;后面仔细看日志&#xff0c;原来是内…

同步系统时间chrony

安装 yum install chrony 启动并启用chronyd服务&#xff1a; systemctl start chronyd systemctl enable chronyd 查看chrony的状态&#xff0c;确认是否已经与NTP服务器同步 chronyc tracking