【鸿蒙学习】HarmonyOS应用开发者基础 - 从网络获取数据


学完时间:2024年8月15日

一、前言叨叨

学习HarmonyOS的第七课,人数居然反超到了3735名了,难道前面的那一课,这么多人挂科了吗。不过这一节的内容稍微简单一些,都是网络相关知识。

<HarmonyOS第一课>从网络获取数据

二、HTTP请求

1. HTTP

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是互联网上数据交换的基础,定义了客户端(用户设备)和服务器(网站主机)之间请求和响应的格式。HTTP最初由蒂姆·伯纳斯-李在1989年发明,用于在万维网上传输超文本文档,现在已经成为互联网上最广泛使用的协议之一。

HTTP的工作原理相对简单:客户端通过发送一个HTTP请求到服务器,服务器接收请求并用包含资源的HTTP响应进行回复。这个过程通常涉及以下步骤:

    1. 连接建立
      客户端通过TCP协议与服务器建立连接,通常使用默认端口80(对于HTTP)或443(对于HTTPS,即HTTP的安全版本)。
    1. 发送请求
      客户端向服务器发送一个HTTP请求,请求包含方法(如GET、POST、PUT、DELETE等)、目标资源的URL、协议版本以及可选的请求头和请求体。
    1. 服务器响应
      服务器处理请求并返回一个HTTP响应,响应包括状态码(如200表示成功,404表示未找到等)、响应头和响应体(通常是请求的资源,如HTML页面、图片等)。
    1. 连接关闭
      在交换完数据后,通常TCP连接会被关闭,但在HTTP/1.1中,可以保持连接打开,以便传输多个请求和响应,这种方式称为持久连接。

2. HTTPS

HTTPS:应用层协议,支持加密传输以及身份认证,保证数据的安全传输。与HTTP最大的区别是服务端与客户端之间进行数据传输都会经过TLS/SSL加密。

3. SSL和TLS

SSL :SSL(Secure Socket Layer)安全套接层是位于传输通信协议(TCP/IP)之上实现的一种安全协议。
TLS:TLS(Transport Layer Security)是一种安全协议,旨在实现数据加密传输。

TLS/SSL握手过程

应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。

在http模块中,多个请求可以使用同一个httpRequest对象,httpRequest对象是不可以复用。并且在使用完毕时,需要调用destory方法主动销毁HttpRequest对象销毁。

三、ArkTS创建HTTP数据请求

HTTP数据请求功能主要由http模块提供。

使用该功能需要申请ohos.permission.INTERNET 权限。具体参考 声明权限

request接口开发步骤

  • 从@kit.NetworkKit中导入http命名空间。
  • 调用createHttp()方法,创建一个HttpRequest对象。
  • 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。
  • 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
  • 按照实际业务需要,解析返回结果。
  • 调用该对象的off()方法,取消订阅http响应头事件。
  • 当该请求使用完毕时,调用destroy()方法主动销毁。

requestInStream接口开发步骤

  • 从@kit.NetworkKit中导入http命名空间。
  • 调用createHttp()方法,创建一个HttpRequest对象。
  • 调用该对象的on()方法,可以根据业务需要订阅HTTP响应头事件、HTTP流式响应数据接收事件、HTTP流式响应数据接收进度事件和HTTP流式响应数据接收完毕事件。
  • 调用该对象的requestInStream()方法,传入http请求的url地址和可选参数,发起网络请求。
  • 按照实际业务需要,可以解析返回的响应码。
  • 调用该对象的off()方法,取消订阅响应事件。
  • 当该请求使用完毕时,调用destroy()方法主动销毁。

四、ArkTS创建HTTPS请求

首先在HttpUtil.ets 中调用createHttp方法创建一个请求任务,再通过request方法发起网络请求。该方法支持三个参数:url、options以及callback回调,其中options可以设置请求方法、请求头以及超时时间等。

dart 复制代码
// HttpUtil.ets
import { http } from '@kit.NetworkKit';
import CommonConstant from '../constant/CommonConstants';
export default async function httpGet(url: string) {
  if (!url) {
    return undefined;
  }
  let request = http.createHttp();

  let result = await request.request(url, {
    method: http.RequestMethod.GET,
    header: { 'Content-Type': 'application/json' },
    readTimeout: CommonConstant.READ_TIMEOUT,
    connectTimeout: CommonConstant.CONNECT_TIMEOUT
  });
  return result;
}

接着在入口页面中调用上述封装的httpGet方法请求指定网址,将请求得到的内容嵌入到Web组件中。

相关推荐
是翔仔呐5 分钟前
第13章 SPI通信协议全解:底层时序、4种工作模式与W25Qxx Flash芯片读写实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
攻城狮在此12 分钟前
华为汇聚交换机DHCP中继配置
网络·华为
互联网散修14 分钟前
鸿蒙应用开发:图片渐进式加载Canvas渲染案例分享
harmonyos·渐进式加载图片
婷婷_17218 分钟前
【PCIe验证每日学习·阶段复盘01】Day1~Day7 纯理论深度复盘
网络·程序人生·芯片·每日学习·pcie 验证·ic 验证·pcie学习
是翔仔呐32 分钟前
第14章 CAN总线通信全解:底层原理、帧结构与双机CAN通信实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
Shepherd06191 小时前
【IT 实战】Apache 反向代理 UniFi Controller 的终极指北(解决白屏、502、400 错误)
运维·网络·apache·it·unifi
Yilena2 小时前
一文讲透 Agent 应用中的记忆工程
人工智能·学习
再玩一会儿看代码2 小时前
Java中 next() 和 nextLine() 有什么区别?一篇文章彻底搞懂
java·开发语言·经验分享·笔记·学习
那山川2 小时前
ros学习笔记15~40
笔记·学习
Swift社区3 小时前
鸿蒙游戏里的 AI Agent 设计
人工智能·游戏·harmonyos