【鸿蒙学习】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组件中。

相关推荐
南宫生3 分钟前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
技术小齐23 分钟前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
竹言笙熙31 分钟前
代码审计初探
学习·web安全
日记成书33 分钟前
物联网智能项目
物联网·学习
MarkHD1 小时前
第十八天 WebView深度优化指南
华为·harmonyos
虾球xz1 小时前
游戏引擎学习第118天
学习·游戏引擎
gz927cool1 小时前
大模型做导师之开源项目学习(lightRAG)
学习·开源·mfc
塞尔维亚大汉2 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【MIPI CSI】
harmonyos·领域驱动设计
别说我什么都不会2 小时前
鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP
操作系统·harmonyos
shimly1234562 小时前
tcpdump 用法示例
网络·测试工具·tcpdump