有关HarmonyOS-ArkTS的Http通信请求

news2024/11/26 0:39:33

一、Http简介

        HTTP(Hypertext Transfer Protocol)是一种用于在Web应用程序之间进行通信的协议,通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。

        Http通信是基于客户端-服务器模型的,其中客户端发送Http请求到服务器,服务器则返回Http响应给客户端。Http通信通常使用TCP/IP作为传输协议,通过指定的端口(默认为80端口)进行通信。

        在Http通信中,客户端发送的请求由以下几部分组成:

        1. 请求行:包含HTTP方法(如GET、POST等)、请求的URL和HTTP协议版本。

        2. 请求头部:包含额外的请求信息,如请求的内容类型、授权信息等。

        3. 请求体(可选):用于传输请求的数据,例如在POST请求中传递表单数据或JSON数据。

        服务器接收到请求后,会进行处理,并返回Http响应给客户端。Http响应由以下几部分组成:

        1. 状态行:包含Http协议版本、状态码和对应的状态消息。

        2. 响应头部:包含额外的响应信息,如响应的内容类型、长度、缓存设置等。

        3. 响应体(可选):包含服务器返回的实际数据,例如HTML页面内容、JSON数据等。

        通过HTTP通信,客户端可以向服务器发起请求并获取响应,实现了Web应用程序之间的数据交换和信息传输。

二、基于ArkTS开发中的Http通信

        而在HarmonyOS基于ArkTS语言中使用Http通信,需要先获得 ohos. permission. INTERNET 权限,再导入@ohos.net.Http模块,并调用createHttp()方法创建一个Http通信类实例,该方法会返回一个HttpRequest对象实例。但是每个HttpRequest实例对应一个Http请求,如果要发起多个Http请求,则需要为每个Http请求生成一个HttpRequest实例。

 1、Http通信的相关接口

        createHttp()                             :创建一个Http请求    
        request()                                  :根据 URL 网址,发起Http网络请求    
        on(type:'headersReceive')    :订阅 Http Response Header事件    
        off(type:'headersReceive')    :取消订阅HttpResponse Header事件
        destroy()                                  :中断请求任务    

2、开发基本流程

        (1)导人@ohos.net.Http模块。
        (2)调用createHttp()方法创建一个HTTP通信类实例。
        (3)根据需求,通过on()方法订阅响应头时间。
        (4)调用request()方法向用户输入URL,发起一个Http请求报文。        
        (5)根据需求,处理通信对方的Http响应报文。

三、Http访问示例

        不设置Http请求方式参数,则默认方式为GET。其他方法还有HEAD、PUT、DELETE、TRACE、CONNECT。

        先在module.josn5添加ohos. permission. INTERNET权限

1、GET请求示例

import http from '@ohos.net.http'
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  //GET网络请求函数
  getUserName(){
    let httpRequest = http.createHttp()
    let url = 'XXX';
    httpRequest.request(url,{//设置请求报文的参数
      method: http.RequestMethod.GET, //以GET方式请求
      connectTimeout:10000,	//连接超时时间ms
      readTimeout:10000//读取超时时间ms
    },(err,data)=>{//回调函数返回数据
      //通过控制台查看返回的数据
      console.info("data:" + JSON.stringify(data.result))
      console.info("data:" + JSON.stringify(data.responseCode))
      console.info("data:" + JSON.stringify(err))
      if(err){
        this.message = JSON.stringify(err)//将错误信息显示
      } else {
        if(data.responseCode == 200){//请求有效将用户名称显示
          this.message = JSON.parse(data.result.toString()).data.name
        } else {//无效请求则将状态码显示
          this.message = data.responseCode + '40'
        }
      }
    })
  }
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        //手动点击发送GET网络请求
        Button('发送请求').onClick(()=>{
          this.getUserName()
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

        在界面中显示一个Text文本,一个发送请求的Button按钮,点击Button后就会发送GET网络请求,声明一个用于发送GET网络请求的函数。在这个示例中我们会发送请求获取用户信息,显示用户的名称。

2、POST请求示例

import http from '@ohos.net.http';
let httpRequest = http.createHttp();
let url = 'XXX'; //准备你要请求的url地址
let requestOptions = {	//设置请求报文的参数
  method: http.RequestMethod.POST, //以POST方式请求
  header:{
    'Content - Type':'application/json'
  },
  extraData: {//发送额外的参数
    "data": "data to send",
  },
  connectTimeout:10000,	//连接超时时间ms
  readTimeout:10000//读取超时时间ms
}
//调用on()方法订阅响应头
httpRequest.on( 'headersReceive',(header) => {
  console.info( 'header:'+ JSON.stringify(header));});
//调用request()方法向对方发送请求报文
let res = httpRequest.request(url, requestOptions);
//通过Promise方式处理响应,返回到控制台
res.then((data) =>{
  console.info('header:'+ JSON.stringify(data.header));
  console.info('Content - Type:' + data.header['Content - Type']);
  console.info('Result:'+ data.result);
  console.info('code:'+ data.responseCode);
}).catch((err) =>{
  //处理请求异常信息并销毁请求
  console.info('error:'+ JSON.stringify(err));
  httpRequest.destroy( );
});

以上可能有一些错误和不足之处,如有更好的方法和建议,欢迎您在评论区友善讨论。

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

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

相关文章

【送书活动】这本30w人都在看的Python数据分析畅销书:更新了!

文章目录 🍔简介🌹作译者简介🎍购书链接:🥰彩蛋 想学习python进行数据分析,这本《利用python进行数据分析》是绕不开的一本书。目前该书根据Python3.10已经更新到第三版。 🍔简介 Python 语言极…

软件学院PTA天梯赛初赛选拔赛题解

目录 7-2 生肖确定(模拟) AC代码: 7-3 韩信点兵(模拟) AC代码: 7-4 程序员买包子(模拟) AC代码: 7-5 h0078. 蛇形矩阵变形 AC代码: 7-6 军事体能成绩…

spring-webmvc练习-日程管理-访问后端展示列表数据

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/schedule.js import request from "../util/request.js";export let getSchedu…

机器学习笔记 - 3D对象检测技术路线调研(未完)

一、3D对象检测简述 3D对象检测是计算机视觉中的一项任务,其目标是根据对象的形状、位置和方向在 3D 环境中识别和定位对象。它涉及检测物体的存在并实时确定它们在 3D 空间中的位置。这项任务对于自动驾驶汽车、机器人和增强现实等应用至关重要。 1、基本流程 给定…

js原理网页内容防复制-原理、实现及破解

大家好,这一集我们来看一下如何通过js代码实现网页内容防复制,并且使用代码复现效果,同时如何破解这种防复制。 视频教程链接:https://www.bilibili.com/video/BV1zM41197y7/ 代码删掉即可,删不掉关闭设置 您可以使用…

网络爬虫(Python:Requests、Beautiful Soup笔记)

网络爬虫(Python:Requests、Beautiful Soup笔记) 网络协议简要介绍一。OSI参考模型二、TCP/IP参考模型对应关系TCP/IP各层实现的协议应用层传输层网络层 HTTP协议HTTP请求HTTP响应HTTP状态码 Requests(Python)Requests…

网络爬虫(Python:Selenium、Scrapy框架;爬虫与反爬虫笔记)

网络爬虫(Python:Selenium、Scrapy框架;爬虫与反爬虫笔记) SeleniumWebDriver 对象提供的相关方法定位元素ActionChains的基本使用selenium显示等待和隐式等待显示等待隐式等待 Scrapy(异步网络爬虫框架)Sc…

SpringCloud微服务网关Gateway:gateway基本实现、断言工厂、过滤器工厂、浏览器同源策略、跨域问题解决方案

Gateway网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0和Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API路由管理方式 为什么…

HTML+CSS+JS网页设计与制作摄影类个人网页

可以使用网页三剑客htmlcssjs实现网页设计与制作,页面排版布局高端大气。 使用HTMLCSS页面布局设计,HTMLCSSJS网页设计与制作摄影类个人网页,这是一个优质的个人网页制作。 凭借简约的设计风格、精湛的制作工艺,突破与创新的理念…

2019年12月 Scratch(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共15题,每题2分,共30分) 第1题 以下模块,可以“说”出“我喜欢Apple”的是? A: B: C: …

测试工程师必看系列Jmeter_性能测试:负载测试和压力测试

负载测试 负载测试/容量测试:通过在测试过程中不断的调整负载,找到在多少用户量情况下,系统出现性能下降拐点;也被称为容量测试; 举例: 微信发送红包的负载测试: 1、找运维人员了解目前系统…

【数据库】表的连接在执行时的算法解析,嵌套循环连接算法的几种实现,多表连接中表的数量会影响什么

嵌套循环连接 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新…

CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务…

数据库基础教程之数据库的创建(二)

双击打开Navicat,点击:文件-》新建连接-》PostgreSQL 在下图新建连接中输入各参数,然后点击:连接测试,连接成功后再点击确定。 创建数据表   3.1 方法1   3.1.1.双击你的数据库-》双击public-》双击选中表-》右键-》新建表-》常规 3.1.2.设置字段信息   双击选中创建…

【李宏毅-元学习】

一、基本概念 1、元学习:学习如何学习,超参数调整 2、机器学习和元学习 机器学习:定义函数(未知参数)-定义损失函数-优化(最小化损失函数) 3、什么是元学习 机器学习通过三个步骤找到了学习算…

建造者模式-C语言实现

UML类图&#xff1a; 代码实现&#xff1a; #include <stdio.h> #include <stdlib.h>// 产品类 typedef struct {char* part1;char* part2;char* part3; } Product;// 抽象建造者类 typedef struct {void (*buildPart1)(void*, const char*);void (*buildPart2)(v…

Linux进程通信——信号(二)

信号处理函数的注册 信号处理函数的注册不只一种方法&#xff0c;分为入门版和高级版 1.入门版: 函数 signal 2.高级版:函数 sigection 信号处理发送函数 信号发送函数也不止一个&#xff0c;同样分为入门版和高级版 1.入门版: 函数 kill 2.高级版: 函数 sigqueue sigactio…

图解系列--Http

1.URI和URL 1.1.URL URL是统一资源定位符。URL正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。比如&#xff0c;http://hackr.jp/就是 URL。 1.2.URI 统一资源标识符。 URI 用字符串标识某一互联网资源&#xff0c;而URL表示资源的地点&#xff08;互联网上所处的位…

Unity 自带的一些可以操控时间的属性或方法。

今天来总结下Unity自带的一些可以操控时间的方法。 1、Time.time。比较常用计算运行时间而触发特定事件。 public class Controller : MonoBehaviour {public float eventTime 5f; // 触发事件的时间private float startTime; // 游戏开始的时间private void Start(){startT…

使用凌鲨进行接口联调

接口联调是指在软件开发过程中&#xff0c;不同的团队或模块之间进行接口协作的一种技术手段。它是研发过程中必不可少的一个环节&#xff0c;旨在确保不同模块之间的数据交互和功能调用能够顺畅进行&#xff0c;从而提升整个系统的稳定性和性能。 凌鲨中支持了GRPC&#xff0…