鸿蒙HTTP请求详解(附带示例)
HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种用于在网络上传输超文本的协议,它基于请求−响应模式,并且通常建立在传输控制协议(TCP)之上。
HTTP 定义了客户端与服务器之间通信的消息格式,包括客户端可以发送的请求类型以及服务器应返回的响应内容。这种简洁的通信模型是推动现代网络发展和技术繁荣的关键因素。
HarmonyOS 的 http 模块支持发起 HTTP 请求,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富、更加实用的体验。
我们按照以下方式来导入http模块:
当浏览者访问一个网页时,浏览者的浏览器会向网页所在的服务器发出请求。当浏览器接收并显示网页时,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头用以响应浏览器的请求。
下面是常见的 HTTP 状态码:
为了演示该功能,创建一个名为“ArkTSHttp”的应用。在应用的界面上,通过单击按钮来触发 HTTP 请求的操作。

图 1 运行应用显示的界面效果
单击“请求”按钮后发起HTTP请求,返回的结果显示在界面上。
HTTP 定义了客户端与服务器之间通信的消息格式,包括客户端可以发送的请求类型以及服务器应返回的响应内容。这种简洁的通信模型是推动现代网络发展和技术繁荣的关键因素。
HarmonyOS 的 http 模块支持发起 HTTP 请求,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富、更加实用的体验。
我们按照以下方式来导入http模块:
// 导入http模块
import { http } from '@kit.NetworkKit';
HTTP请求方法
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。常用的请求方法如下:| HTTP 方法 | 功能描述 |
|---|---|
| GET | 请求指定的页面信息,并返回实体主体。 |
| HEAD | 类似于 GET 请求,但返回的响应中没有具体的内容,用于获取报头。 |
| POST | 向指定资源提交数据进行处理请求(如提交表单或上传文件),数据包含在请求体中;可能导致新建或修改资源。 |
| PUT | 从客户端向服务器传送的数据取代指定文档的全部内容。 |
| DELETE | 请求服务器删除指定的页面。 |
| CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
| OPTIONS | 允许客户端查看服务器的性能。 |
| TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
| PATCH | 对 PUT 方法的补充,用于对已知资源进行局部更新。 |
当浏览者访问一个网页时,浏览者的浏览器会向网页所在的服务器发出请求。当浏览器接收并显示网页时,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头用以响应浏览器的请求。
下面是常见的 HTTP 状态码:
- 200:请求成功;
- 301:资源(网页等)被永久转移到其他 URL;
- 404:请求的资源(网页等)不存在;
- 500:内部服务器错误。
通过HTTP请求数据
接下来演示如何通过 HTTP 来向 Web 服务请求数据。为了演示该功能,创建一个名为“ArkTSHttp”的应用。在应用的界面上,通过单击按钮来触发 HTTP 请求的操作。
1) 准备一个HTTP服务接口
HTTP 服务接口地址为:https://xxx.com/data/people.json,通过调用该接口,可以返回如下 JSON 格式的数据:
[{"name":"Michael"},
{"name":"Andy Huang","age":25,"homePage":"https://xxx.com/books"},
{"name":"Justin","age":19},
{"name":"Way Lau","age":35,"homePage":"https://xxx.com"}]
2) 添加使用Button组件来触发单击
在初始化的 Text 组件的下方增加一个 Button 组件,以实现“请求”按钮。代码如下:
build(){
Row(){
Column(){
Text(this.message)
.fontSize(38)
.fontWeight(FontWeight.Bold)
// 请求
Button('请求', { type: ButtonType.Capsule })
.width(140)
.fontSize(40)
.fontWeight(FontWeight.Medium)
.margin({ top: 20, bottom: 20 })
.onClick(() => {
this.httpReq()
})
}
.width("100%")
}
.height('100%')
}
当触发 onClick 事件时,会执行 httpReq 方法。3) 发起HTTP请求
httpReq 方法实现如下:
// 导入http模块
import { http } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
// ...
private httpReq() {
// 创建httpRequest对象
let httpRequest = http.createHttp();
let url = "https://xxx.com/data/people.json";
let promise = httpRequest.request(
// 请求url地址
url,
{
// 请求方式
method: http.RequestMethod.GET,
// 可选,默认为60s
connectTimeout: 60000,
// 可选,默认为60s
readTimeout: 60000,
// 开发者根据自身业务需要添加header字段
header: {
'Content-Type': 'application/json'
}
}
);
// 处理响应结果
promise.then((data) => {
if (data.responseCode === http.ResponseCode.OK) {
console.info('Result:' + data.result);
console.info('code:' + data.responseCode);
this.message = JSON.stringify(data.result);
}
}).catch((err: BusinessError) => {
console.info('error:' + JSON.stringify(err));
});
}
上述代码中,演示了发起 HTTP 请求的基本流程:
- 导入 http模块;
- 创建 httpRequest 对象。需要注意的是,每一个 httpRequest 对象对应一个 http 请求任务,不可复用;
- 通过 httpRequest 对象发起 HTTP 请求;
- 处理 HTTP 请求返回的结果,赋值给 message 变量;
- 界面重新渲染显示了最新的 message 变量值。
4) 增加权限
要访问网络资源,需要在 module.json5 文件中声明使用网络的权限“ohos.permission.INTERNET”,示例如下:
"module": {
// ...
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
}
5) 运行
运行应用显示的界面效果如下图所示:
图 1 运行应用显示的界面效果
单击“请求”按钮后发起HTTP请求,返回的结果显示在界面上。
ICP备案:
公安联网备案: