【鸿蒙 HarmonyOS 4.0】网络请求

news2024/11/5 18:50:40

一、介绍

资料来自官网:文档中心

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

  • 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请求' 按钮时,日志会打印成功的结果 

最后:👏👏😊😊😊👍👍 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车载测试,检测项目标准

检测项目: 二.GB/T 31486-2015电动汽车用动力蓄电池电性能要求及试验方法 说明:本标准规定了电动汽车用动力蓄电池(以下简称蓄电池)的 电性能要求、试验方法、检验规则。本标准适用于装载在电动汽车 上的锂离子蓄电池和金属氢化 物镍蓄电池单体和模块&a…

设计模式-创建型模式-抽象工厂模式

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。 由于工厂方法模式中的每个工厂只生产一类产品&…

JS基础之JSON对象

JS基础之JSON对象 目录 JS基础之JSON对象对象转JSON字符串JSON转JS对象 对象转JSON字符串 JSON.stringify(value,replacer,space) value:要转换的JS对象 replacer:(可选)用于过滤和转换结果的函数或数组 space:(可选)指定缩进量 // 创建JS对象 let date {name:"张三…

如何利用内网穿透工具在企业微信开发者中心实现本地接口服务回调

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段,应用服务通常是部署在开发环境,在有数据回调的开发场…

时序数据库TimescaleDB,实战部署全攻略

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

2024华北医院信息网络大会第二轮更新通知

大会背景 近年来,我国医疗行业信息化取得了飞跃式的发展,医疗信息化对医疗行业有着重要的支撑作用。2021年国家卫健委、中医药管理局联合印发《公立医院高质量发展促进行动(2021-2025年)》,提出重点建设“三位一体”智…

Linux定时任务调度

Linux定时任务调度 crond 任务调度 crontab 进行定时任务的设置 介绍 任务调度:是指系统在某个时间执行的特定的命令或程序。 任务调度分类:系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等 个别用户工作:个别用户可能…

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…

SOC电源管理系统简介

1. 概况 随着SOC越来越复杂,包含的IP越来越多,单个SOC上实现了CPU, 射频模块,相机模块,DDR控制模块,外设等等功能。多种功能,多种IP也带来了多档电源的需求。同时为了满足低功耗的挑战,SOC通常被…

代码随想录算法训练营第二十五天|Leetcode216 组合总和III、Leetcode17 电话号码的字母组合

代码随想录算法训练营第二十五天|Leetcode216 组合总和III、Leetcode17 电话号码的字母组合 ● Leetcode216.组合总和III● 解题思路● 代码实现 ● Leetcode17 电话号码的字母组合● 解题思路● 代码实现 ● Leetcode216.组合总和III 题目链接:Leetcode216.组合总和…

计算机网络-局域网和城域网(二)

1.局域网互联设备: 2层网桥(生成树、源路由)、3层交换机、路由器。网桥要求3层以上协议相同,1、2层协议不同可互联。 2.生成树网桥: 又叫透明网桥,IEEE802.1d,生成树算法。基本思想是在网桥之…

2024.2.22

将互斥机制的代码实现 #include<myhead.h> int num7; pthread_mutex_t mutex;//创建互斥锁变量 void *task1(void *arg) {printf("task1:\n");//获取锁资源pthread_mutex_lock(&mutex);num77777;sleep(2); printf("task1:num%d\n",num); //释放…

分享WebGL物体三维建模

界面效果 代码结构 模型素材类似CT (Computed Tomography)&#xff0c;即电子计算机断层扫描&#xff0c;它是利用精确准直的X线束、γ射线、超声波等&#xff0c;与灵敏度极高的探测器一同围绕物体的某一部位作一个接一个的断面扫描。 坐标系统 渲染流程 渲染流程是个将之前准…

报表控件Stimulsoft 新版本2024.1中,功能区工具栏新功能

今天&#xff0c;我们将讨论Stimulsoft Reports、Dashboards 和 Forms 2024.1版本中的一项重要创新 - 在一行中使用功能区工具栏的能力。 Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinF…

game项目(梦开始的地方)

梦开始的地方 由于easyx只支持vis&#xff0c;所以这个项目的书写以后都是在vis上进行&#xff0c;希望自己能够把这个项目好好完成&#xff0c;相信自己&#xff0c;加油&#xff01; 我们需要一个头文件来包括作图工具 (这个头文件在easyx上面下载) #include<graphics.…

PostgreSQL与MySQL,谁更胜一筹

前言 PostgreSQL与MySQL都是优秀的开源数据库。在日常学习中&#xff0c;新手可能接触最多的是MySql,但是实际工作中&#xff0c;两者的应用场景其实都很广。我之前的做过上网流量销售业务&#xff0c;用的是MySQL,现在接触广告业务&#xff0c;用的是pg数据库&#xff0c;每天…

汉诺塔问题—java详解(附源码)

来源及应用 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标&#xff1a;把A杆上的金盘全部移到C杆上&#xff0c;并仍…

Spring学习上下文【ConfigurableApplicationContext】

话不多说&#xff0c;先上图&#xff1a; ConfigurableApplicationContext是Spring框架中的一个接口&#xff0c;它继承了ApplicationContext接口&#xff0c;并扩展了一些额外的方法&#xff0c;用于允许应用程序在运行时动态地修改和管理应用上下文。ConfigurableApplicati…

matlab代码--基于matlabLDPC-和积译码系统

LDPC编码 一个码长为n、信息位个数为k的线性分组码&#xff08;n,k&#xff09;可以由一个生成矩阵 来定义&#xff0c;信息序列 通过G被映射到码字XS.G。线性分组码也可以由一个校验矩阵 来描述。所以码字均满足 。校验矩阵的每一行表示一个校验约束 &#xff0c;其中所有的非…

【大数据】Flink 之部署篇

Flink 之部署篇 1.概述和参考架构2.可重复的资源清理3.部署模式3.1 Application 模式3.2 Per-Job 模式&#xff08;已废弃&#xff09;3.3 Session 模式 Flink 是一个多用途框架&#xff0c;支持多种不同的混合部署方案。下面&#xff0c;我们将简要介绍 Flink 集群的构建模块、…