在网络开发中,HTTP请求是必不可少的一部分。在鸿蒙(HarmonyOS)开发中,同样需要处理网络请求,无论是与后端服务器交互还是获取外部API的数据。下面是对鸿蒙开发中涉及到的HTTP模块——http
模块,以及一个常用的第三方库——axios
模块的总结。
HTTP协议概述
1. 基本概念
- 请求(Request):客户端向服务器发送的消息。
- 响应(Response):服务器接收到请求后返回给客户端的消息。
- 消息格式:HTTP消息由报文头(Header)、状态行(Status Line)和可选的实体主体(Entity Body)组成。
2. 请求报文结构
- 请求行:包含请求方法、请求URI和协议版本。
GET /index.html HTTP/1.1
- 请求头:包含客户端的信息,如Accept-Language、User-Agent等。
Accept-Language: zh-CN,zh;q=0.9 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
- 实体主体:可选部分,包含请求的具体内容,如表单数据或文件上传。
username=admin&password=123456
3. 响应报文结构
- 状态行:包含HTTP版本、状态码及状态描述。
HTTP/1.1 200 OK
- 响应头:包含服务器的信息,如Content-Type、Date等。
Content-Type: text/html; charset=UTF-8 Date: Thu, 01 Jan 2023 12:00:00 GMT
- 实体主体:可选部分,包含响应的具体内容,如HTML文档。
4. 请求方法
- GET:请求指定的资源。
- POST:向指定资源提交数据进行处理请求(例如提交表单或者注册用户)。
- PUT:替换目标资源。
- DELETE:删除指定资源。
- HEAD:类似于GET请求,但只返回头部信息。
- OPTIONS:查询目标资源的通信选项。
- PATCH:对资源进行部分更新。
5. 状态码
- 1xx(信息响应类):指示请求已被接受,需要进一步处理。
- 2xx(成功响应类):请求已成功被服务器接收、理解,并接受。
- 200 OK:成功。
- 201 Created:创建成功。
- 3xx(重定向类):需要客户端采取进一步的操作来完成请求。
- 301 Moved Permanently:永久重定向。
- 302 Found:临时重定向。
- 4xx(客户端错误类):请求中有错误,或请求无法被服务器理解。
- 400 Bad Request:请求无效。
- 401 Unauthorized:未经授权。
- 403 Forbidden:禁止访问。
- 404 Not Found:找不到资源。
- 5xx(服务器错误类):服务器在处理请求的过程中发生了错误。
- 500 Internal Server Error:内部服务器错误。
- 503 Service Unavailable:服务不可用。
HTTP的工作原理
- 建立连接:客户端与服务器之间建立TCP连接。
- 发送请求:客户端发送HTTP请求到服务器。
- 处理请求:服务器接收请求,处理请求内容。
- 发送响应:服务器根据处理结果构建响应,并发送给客户端。
- 关闭连接:完成响应后,默认情况下会关闭连接(HTTP/1.0),或者保持连接开放以供后续请求使用(HTTP/1.1及以上版本)。
HTTP与HTTPS的区别
- 安全性:HTTPS是在HTTP的基础上加入了SSL/TLS协议,用于加密传输的数据,增强安全性。
- 端口号:HTTP默认端口为80,HTTPS默认端口为443。
- 证书:HTTPS需要服务器端有数字证书支持,确保数据的完整性和机密性。
通过以上概述,你应该对HTTP协议有了更深入的理解。在实际开发中,根据不同的场景选择合适的请求方法和状态码,对于构建健壮的网络应用程序至关重要。
HarmonyOS HTTP模块
官方文档传送门
1. 概述
HarmonyOS提供了内置的http
模块来实现HTTP请求。此模块允许开发者以异步的方式发起HTTP请求,支持GET、POST等多种HTTP方法。
基本用法
1. 导入
import { http } from '@kit.NetworkKit'
2. 创建请求对象
const req = http.createHttp()
3. 发送请求并获取响应
req.request('请求地址url')
.then((res: http.HttpResponse) => {
AlertDialog.show({ message: JSON.stringify(res) })
})
注意事项
-
预览器:无需配置网络权限即可成功发送请求。
-
模拟器:需要配置网络权限才能成功发送请求。
-
真机:需要配置网络权限才能成功发送请求。
-
在HarmonyOS中,你需要在
module.json5
文件中配置网络权限。以下是详细的配置示例:
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone",
"tablet",
"2in1"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:main_pages",
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
],
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
}
],
"extensionAbilities": [
{
"name": "EntryBackupAbility",
"srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets",
"type": "backup",
"exported": false,
"metadata": [
{
"name": "ohos.extension.backup",
"resource": "$profile:backup_config"
}
]
}
]
}
}
// 代码示例
import { http } from '@kit.NetworkKit'
const req = http.createHttp()
req.request('请求地址url')
.then((res: http.HttpResponse) => {
AlertDialog.show({ message: JSON.stringify(res) })
})
2. 主要方法
通过一个图书管理案例来详细了解一下http请求数据的基本使用,因为需要用到接口,我使用的是黑马程序员提供的在线接口文档链接仅供学习
完成效果
3. 示例代码
export interface IBook{
/**
* 响应数组
*/
data: iBook[];
/**
* 响应消息
*/
message: string;
}
export interface IBookdetail{
/**
* 响应数组
*/
data: iBook;
/**
* 响应消息
*/
message: string;
}
export interface iBook {
/**
* 图书作者
*/
author: string;
/**
* 图书名字
*/
bookname: string;
/**
* 图书id
*/
id: number;
/**
* 图书出版社
*/
publisher: string;
}
export const creator='艾宝宝'
获取-图书列表 GET
&&删除-图书 DELETE
import { IBook, iBook } from '