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

news2024/11/18 20:28:48

一、介绍

资料来自官网:文档中心

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

  • 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/1462168.html

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

相关文章

Adobe将类ChatGPT集成到PDF中

2月21日,全球多媒体巨头Adobe在官网宣布,推出生成式AI助手AI Assistant,并将其集成在Reader 和Acrobat 两款PDF阅读器中。 据悉,AI Assistant的功能与ChatGPT相似,可以基于PDF文档提供摘要、核心见解、基于文档内容&a…

[bing]“gang调度 Kubernetes的并发控制和一致性机制“论点的对应的源码分析

你是一位K8S专家。请分析在Kubernates(https://github.com/kubernetes/kubernetes.git)项目和调度coscheduling(https://github.com/kubernetes-sigs/scheduler-plugins/tree/master/pkg/coscheduling) 插件中支撑"PodGroup的管理和调度决策涉及到对…

​Fruity Loops Studio21.2.3软件中文版官方功能介绍

​Fruity Loops Studio 21.2 软件功能介绍 一、概述 Fruity Loops Studio,现更名为FL Studio,是一款由Image-Line公司开发的数字音频工作站(DAW)。该软件广泛用于音乐创作、编曲、录音、混音和制作。FL Studio 21.2是其近期的一…

ARMv8-AArch64 的异常处理模型详解之异常向量表vector tables

目录 一,AArch64 异常向量表 二,栈指针以及SP寄存器的选择 三,从异常返回 一,AArch64 异常向量表 异常向量表(vector tables)是一组存放于普通内存(normal memory)空间的&#xf…

JavaWeb——002JS Vue快速入门

目录 一、JS快速入门​编辑 1、什么是JavaScript?​编辑 2、JS引入方式​编辑 2.1、示例代码 3、JS基础语法 3.1、书写语法 3.2、变量​编辑 3.3、数据类型 3.4、运算符​编辑 3.5、流程控制语句​编辑 4、JS函数 4.1、第一种函数定义方式 function funcName(参数…

什么是数组

目录 概念 案例 有变量,为什么还要数组? 概念 数组就是一个容器,用来存一批同种类型的数据。 案例 有变量,为什么还要数组? 1、假设用变量解决时间点名的需求 代码繁琐:大量变量的定义。 实现需求繁琐…

linux platform架构下I2C接口驱动开发

目录 概述 1 认识I2C协议 1.1 初识I2C 1.2 I2C物理层 1.3 I2C协议分析 1.3.1 Start、Stop、ACK 信号 1.3.2 I2C协议的操作流程 1.3.3 操作I2C注意的问题 2 linux platform驱动开发 2.1 更新设备树 2.1.1 添加驱动节点 2.1.2 编译.dts 2.1.3 更新板卡中的.dtb 2.2 …

Win11蓝屏开不了机进入安全模式的快速方法

最近,很多使用Win11电脑的用户都在反映自己遇到了蓝屏问题,这时候想通过进入系统的安全模式,来解决电脑蓝屏的问题,却不知道进入安全模式的具体操作方法,下面给大家介绍最简单快速的进入方法,帮助大家轻松解…

NDK的log.h使用__android_log_print报错app:buildCMakeDebug[x86_64]

org.gradle.api.tasks.TaskExecutionException: Execution failed for task :app:buildCMakeDebug[x86_64] 重点是 Execution failed for task :app:buildCMakeDebug[x86_64]. 我的代码&#xff1a; #include <android/log.h> #define LOG_TAG "MyJNI" #d…

游戏同步+游戏中的网络模块

原文链接&#xff1a;游戏开发入门&#xff08;九&#xff09;游戏同步技术_游戏数据同步机制流程怎么开发-CSDN博客 游戏开发入门&#xff08;十&#xff09;游戏中的网络模块_游戏开发组网-CSDN博客 3.同步技术的基本常识&#xff1a; a.同步给谁&#xff1f;某个用户&…

二叉树基础知识总结

目录 二叉树基础知识 概念 : 根节点的五个形态 : 特殊的二叉树 满二叉树 : 完全二叉树 : 二叉搜索树 : 平衡二叉搜索树 : 二叉树的性质 : 二叉树的存储结构 二叉树的顺序存储结构 二叉树的链式存储结构 二叉树的遍历方式 : 基础概念 前中后遍历 层序遍历 :…

解决Ultra 5 125H处理器核显使用solidworks卡顿问题

硬件环境&#xff1a;机械革命 无界14pro Ultra 5 125H 软件环境&#xff1a;windows11 solidworks2023 现象&#xff1a;在使用solidworks作图时&#xff0c;软件卡顿&#xff0c;鼠标无法拖动模型 解决办法&#xff1a; 1&#xff0c;下载并安装solidworks官方给出的修补程…

c语言经典测试题2

1.题1 我们来思考一下它的结果是什么&#xff1f; 我们来分析一下&#xff1a;\\是转义为字符\&#xff0c;\123表示的是一个八进制&#xff0c;算一个字符&#xff0c;\t算一个字符&#xff0c;加上\0&#xff0c;应该有13个&#xff0c;但是strlen只计算\0前的字符个数。所以…

3个脚本练习

1.判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 1.下载mailx服务并设置 yum install mailx -y vim /etc/mail.rc 将下列内容写入文件末尾即可 ​​​​​​​set from自己邮箱qq.…

【计算机网络】socket 网络套接字

网络套接字 一、端口号1. 认识端口号2. socket 二、认识TCP协议和UDP协议1. TCP协议2. UDP协议 三、网络字节序四、socket 编程1. socket 常见API2. sockaddr 结构3. 编写 UDP 服务器&#xff08;1&#xff09;socket()&#xff08;2&#xff09;bind()&#xff08;3&#xff0…

SQL注入之DNSLog外带注入

一、认识&#xff1a; 什么是dnslog呢&#xff1f; DNS就是域名解析服务&#xff0c;把一个域名转换成对应的IP地址&#xff0c;转换完成之后&#xff0c;DNS服务器就会有一个日志记录本次转换的时间、域名、域名对应的ip、请求方的一些信息&#xff0c;这个日志就叫DNSLog。…

单体微服务K8S笔记

单体微服务K8S笔记 https://blog.csdn.net/m0_48341969/article/details/126063832思路参考以上博客 //测试 https://gitee.com/yangbuyi/yi项目组织参考以上git 单体&#xff1a; 不特地介绍 微服务&#xff1a; rpc:远程过程调用 拆分&#xff0c;分别部署&#xff0…

无人机快递(物流)技术方案,无人机快递(物流)基础知识

无人机快递技术是一种利用无人机进行快递配送的先进技术。通过利用无人机&#xff0c;快递企业能够在偏远地区或难以通行的地区提供配送服务&#xff0c;同时提高配送效率并降低人力成本。 无人机基本情况 无人驾驶飞机简称“无人机”&#xff0c;是利用无线电遥控设备和自备的…

跨境电商选品推荐:如何在Shopee上找到热销商品?

在当今全球化的商业环境中&#xff0c;跨境电商成为越来越多企业和个人的选择。而在跨境电商中&#xff0c;选品是至关重要的一环&#xff0c;因为选对了产品&#xff0c;销售就迈出了成功的一步。在众多跨境电商平台中&#xff0c;Shopee作为新兴的明星平台&#xff0c;备受关…

pytest基本应用

文章目录 1.pytest安装2.用例运行规则3.常用参数断言运行参数用例控制setup和teardownini配置文件 4.常用插件5.pytest高阶用法用例跳过参数化 6.pytest之Fixture使用fixture使用装饰器usefixtures 7.pytest之conftest.py8.conftestfixtureyieldyield介绍前后置使用 1.pytest安…