有关HarmonyOS-ArkTS的Http通信请求

一、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,	//连接超时时间msreadTimeout: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,	//连接超时时间msreadTimeout: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.mzph.cn/news/171807.shtml

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

相关文章

【Linux学习笔记】protobuf 基本数据编码

https://zhuanlan.zhihu.com/p/557457644https://zhuanlan.zhihu.com/p/557457644 [新文导读] 从Base64到Protobuf,详解Protobuf的数据编码原理本篇将从Base64再到Base128编码,带你一起从底层来理解Protobuf的数据编码原理。本文结构总体与 Protobuf 官…

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

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

23.11.26日总结

图片与文字顶部对齐&#xff1a; <div class"addDishImgBox"><span class"addDishImgZi">商品图片&#xff1a;</span><img :src"myStorePhoto" class"addDishImg"> </div> .addDishImgBox{display: f…

8.前端--CSS-文本属性【2023.11.26】

CSS Text&#xff08;文本&#xff09;属性可定义文本的外观&#xff0c;比如文本的颜色、对齐文本、修饰文本、文本缩进、行间距等 1.文本颜色 color 属性用于定义文本的颜色。 语法&#xff1a; div { color: red; }属性&#xff1a; 2.文本对齐 text-align 属性用于设置元…

学生党福音!一个能自定义词库的单词软件--单词魔方

大家好 我是Yhen 这一期给大家介绍一款自制的单词软件–单词魔方 文章目录 一.创作缘由二.功能介绍&升级内容三.使用方法四.程序获取 一.创作缘由 为什么会有想法开发这个单词软件呢&#xff1f; 因为平时自己在做阅读&#xff0c;看电影时积累下来了一些单词 当我想要系…

【Linux】Linux项目自动化构建工具 --- make / makefile

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和Linux还有算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 …

Node.js下载安装及配置镜像源

一、进入官网地址下载安装包 https://nodejs.org/dist 选择对应你系统的Node.js版本 这里我选择的是Windows系统、64位 二、安装程序 &#xff08;1&#xff09;下载完成后&#xff0c;双击安装包&#xff0c;开始安装Node.js (2)直接点【Next】按钮&#xff0c;此处可根据…

jmeter 接口测试快速入门 以飞致云平台为例

飞致云电商API地址系统来自飞致云项目。接口API地址&#xff1a;https://gz.fit2cloud.com/swagger-ui.html 飞致云电商系统接口文档 V1.0&#xff1a;见 有道云笔记 该网站可以做接口测试练习。快速了解如何测试接口&#xff0c;如何做关联 系统基地址&#xff1a;https://g…

树套树 (线段树+splay)

树套树&#xff0c;就是线段树、平衡树、树状数组等数据结构的嵌套。 最简单的是线段树套set&#xff0c;可以解决一些比较简单的问题&#xff0c;而且代码根线段树是一样的只是一些细节不太一样。 本题中用的是线段树套splay&#xff0c;代码较长。 树套树中的splay和单一的…

【数据结构】堆(C语言)

今天我们来学习堆&#xff0c;它也是二叉树的一种&#xff08;我滴神树&#xff01;&#xff09; 目录 堆的介绍&#xff1a;堆的代码实现&#xff1a;堆的结构体创建&#xff1a;堆的初始化&#xff1a;堆的销毁&#xff1a;堆的push&#xff1a;堆的pop&#xff1a;判空 &am…

力扣373场周赛题解

第一题&#xff1a; 这个题是一个简单题&#xff0c;数据范围也特别小&#xff0c;所以直接使用模拟方式暴力解答。 直接进行行移动的过程&#xff0c;然后检查移动后的结果是否与移动前相同。 代码&#xff1a; ​ public class Solution {// 将指定行循环右移k次pri…

6.前端--CSS-基础选择器【2023.11.26】

1.CSS基本选择器 标签选择器&#xff1a; 标签选择器&#xff08;元素选择器&#xff09;是指用 HTML 标签名称作为选择器&#xff0c;按标签名称分类&#xff0c;为页面中某一类标签指定统一的 CSS 样式。标签选择器可以把某一类标签全部选择出来&#xff0c;比如所有的 <…

ns-3安装教程

1️⃣ VMware安装Ubuntu虚拟机 VMware安装Ubuntu 18.04虚拟机 6.桥接模式网络配置往后都不看 VMware16 安装Ubuntu22.04.1 服务器版操作系统教程 这块主要看怎么从清华镜像下载ubuntu 本人安装的是ubuntu22.04.3 2️⃣ 安装ns3 【ns-3】零基础安装教程 安装依赖库时遇到了问题 …

Bun 1.0 正式发布,爆火的前端运行时,速度遥遥领先!

目录 Bun Github 41.6k 另外&#xff0c;Bun.js 原生支持了数百个 Node.js 和 Web API&#xff0c;包括约 90% 的 Node-API 函数(fs、path、Buffer 等)。 一、包子1.0Bun 1.0终于来了。 二、Bun 是一个一体化工具包 为什么包子存在 Bun 的目标很简单&#xff1a;消除缓慢…

现货黄金区间交易的两个要点

在现货黄金市场中&#xff0c;我们常碰到横盘区间行情。有区间&#xff0c;就终究会出现突破&#xff0c;因为金价不可能缺乏方向而一直在区间内运行。那既然要突破&#xff0c;我们又应当如何应对和交易呢&#xff1f;下面我们就来讨论一下。 切忌在突破发生时马上跟随突破方向…

个人成长|信奉长期主义,就要多做可积累有复利的事。

哈喽啊&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近有个哥们儿吐槽&#xff0c;说他们公司人事找他谈话&#xff0c;要给降工资&#xff0c;他不同意。 过了没几天又说&#xff1a; “定了&#xff0c;全员降薪”。 “你同意了&#xff1f;” “不同意&#xff0…

CV计算机视觉每日开源代码Paper with code速览-2023.11.21

点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构&#xff1a;Transformer】Multi-entity Video Transformers for Fine-Grained Video Representation Learning 论文地址&…

Qt 串口编程-从入门到实战

1. Qt 串口通信流程解析 1.1 串行通信和并行通信对比 并行通信适合距离较短的通信&#xff0c;且信号容易受干扰&#xff0c;成本高串口通讯-设备&#xff08;蓝牙&#xff0c; wifi&#xff0c; gprs&#xff0c; gps&#xff09; 1.2 Qt 串口通信具体流程 1. 创建 QSerial…

Java基于springboot+vue开发服装商城小程序

演示视频&#xff1a; 小程序 https://www.bilibili.com/video/BV1rM411o7m4/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 管理员 https://www.bilibili.com/video/BV1fc411D7V3/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae…