「江鸟中原」有关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.hqwc.cn/news/225228.html

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

相关文章

分享一套MES源码,可以直接拿来搞钱的好项目

目前国内智能制造如火如荼,工厂信息化、数字化是大趋势。如果找到一个工厂,搞定一个老板,搞软件的朋友就能吃几年。 中国制造业发达,工厂林立,但是普遍效率不高,需要信息化提高效率。但是矛盾的地方在于&a…

VSD Viewer for Mac(Visio绘图文件阅读器)

VSD Viewer for Mac版是mac上一款非常强大的Visio绘图文件阅读器,它为打开和打印Visio文件提供了简单的解决方案。可以显示隐藏的图层,查看对象的形状数据,预览超链接。还可以将Visio转换为包含图层,形状数据和超链接的PDF文档。 …

vue中的插槽用法(动态插槽)

vue中提供了一种通讯方式叫插槽>分为:默认插槽、具名插槽(作用域插槽) 1. 当一个组件有不确定的结构时, 就需要使用slot技术了 2. 注意: 插槽内容是在父组件中编译后, 再传递给子组件 3. 如果决定结构的数据在父组件, 那用默认slot或具名slot (1) 当只有一个不…

动态规划学习——等差子序列问题

目录 一,最长等差子序列 1.题目 2.题目接口 3.解题思路及其代码 二,等差序列的划分——子序列 1.题目 2.题目接口 3.解题思路及其代码 一,最长等差子序列 1.题目 给你一个整数数组 nums,返回 nums 中最长等差子序列的长度…

【Java Spring】SpringBoot 五大类注解

文章目录 Spring Boot 注解简介1、五大类注解的作用2、五大类注解的关系3、通过注解获取对象4、获取Bean对象名规则解析 Spring Boot 注解简介 Spring Boot的核心就是注解。Spring Boot通过各种组合注解,极大地简化了Spring项目的搭建和开发。五大类注解是Spring B…

反转链表的三种写法

题目链接:https://leetcode.cn/problems/reverse-linked-list/ 方法一:循环,维护好两个节点一个前一个后 class Solution {public ListNode reverseList(ListNode head) {ListNode pre null;ListNode local head;while(local ! null){List…

七、Lua字符串

文章目录 一、字符串(一)单引号间的一串字符(二)local str "Hello, "(三)[[ 与 ]] 间的一串字符(四)例子 二、字符串长度计算(一)string.len&…

信奥编程 1168:大整数加法

解析:在c中需要考虑这么几个问题,第一个是大数据的输入,第二个是大数据的存储,第三是大数据的计算方式,最后是输出。 针对上述几个问题,第一个问题,采用字符串的方式或者数组加循环的方式接收输…

PlantUML语法(全)及使用教程-时序图

目录 1. 参与者1.1、参与者说明1.2、背景色1.3、参与者顺序 2. 消息和箭头2.1、 文本对其方式2.2、响应信息显示在箭头下面2.3、箭头设置2.4、修改箭头颜色2.5、对消息排序 3. 页面标题、眉角、页脚4. 分割页面5. 生命线6. 填充区设置7. 注释8. 移除脚注9. 组合信息9.1、alt/el…

Python pyinstaller打包exe最完整教程

目录 1 简介 2 安装 3 原理和打包效果 3.1 原理概述 3.2 搜索模块 3.3 打包效果概述 3.4 打包成单个文件夹 优点 缺点 3.5 打包成单个exe 优点 缺点 4 打包 4.1 基本语法 4.2 参数总览 位置参数 可选参数 4.3 隐藏控制台窗口 4.4 资源嵌入exe 4.5 更改图标…

nginx配置相关应用服务

1、无ssl证书的conf文件 server {listen 80;server_name test.domain.com;root html;index index.html index.htm;location / {proxy_http_version 1.1;proxy_set_header Connection "";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_…

CCC联盟数字钥匙(一)——UWB MAC概述

本文在前面已经介绍了相关UWB的PHY之后,重点介绍数字钥匙(Digital Key)中关于MAC层的相关实现规范。由于MAC层相应涉及内容比较多,本文首先从介绍UWB MAC的整体框架,后续陆续介绍相关的网络、协议等内容。 1、UWB MAC架…