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

相关推荐
m0_7382065428 分钟前
嵌入式学习的第二十二天-数据结构-栈+队列
数据结构·学习
shykevin3 小时前
python开发Streamable HTTP MCP应用
开发语言·网络·python·网络协议·http
tmacfrank4 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
向上的车轮6 小时前
MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题
笔记·学习·matlab
数据与人工智能律师6 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
__Benco7 小时前
OpenHarmony平台驱动开发(十七),UART
人工智能·驱动开发·harmonyos
前端小崔7 小时前
从零开始学习three.js(18):一文详解three.js中的着色器Shader
前端·javascript·学习·3d·webgl·数据可视化·着色器
purrrew7 小时前
【Java ee初阶】HTTP(2)
网络·网络协议·http
龙湾开发8 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(二)法线贴图
c++·笔记·学习·图形渲染·贴图
liang_20268 小时前
【HT周赛】T3.二维平面 题解(分块:矩形chkmax,求矩形和)
数据结构·笔记·学习·算法·平面·总结