Http_case
介绍
应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。本项目的构建依据HTTP数据请求示例代码,构建了一个HTTP数据请求的示例应用,它实现了通过按钮实现request接口开发步骤、requestInStream接口开发步骤的功能,使用了@ohos.net.http接口。此外本项目拓展了HTTP数据请求WebDav协议的请求。
注意: 本示例需要用户输入一个实际的URL,方能获得通过的结果。
效果预览
| 程序启动 | 发送HTTP请求 | 发送流式HTTP连接 | HTTP拓展WebDav |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
使用说明
-
前置条件:需要用户在
const TARGET_URL: string = '';这个位置的单引号之间输入一个实际URL(参考格式:https://www.example.com/)。
-
点击 "普通 HTTP 请求" 按钮,发送一个 GET 请求到 TARGET_URL 并显示测试结果。
-
点击 "流式 HTTP 请求" 按钮,发送一个 POST 请求到TARGET_URL,接收流式数据并显示测试结果。
注1:日志输出使用
Logger进行调试,可以查看 HTTP 请求的详细信息,包括请求头、响应数据、状态码等。注2:公共网址的访问不需要证书,故注释了代码中的证书部分
-
点击“HTTP拓展WebDav”按钮,跳转HTTP拓展WebDav页面,页面不同按钮发送不同方式的请求。
注1:日志输出使用
Logger进行调试,可以查看 HTTP 请求的详细信息,包括请求头、响应数据、状态码等。
工程目录
entry/src/main/ets/
|---common
| |---Logger.ets // 日志工具
|---entryability
| │---EntryAbility.ets
|---entrybackupability
│ |---EntryBackupAbility.ets
|---pages
│ |---Index.ets // 主页
│ |---webDav.ets // http拓展WebDav协议
具体实现
-
普通 HTTP 请求 (
sendHttpRequest)- 使用
http.createHttp()创建一个 HTTP 请求对象httpRequest。 - 发起 GET 请求,并设置请求头为
Content-Type: application/json。 - 配置请求的超时参数:连接超时(
connectTimeout)和读取超时(readTimeout)均设置为 60 秒。 - 设置
expectDataType: http.HttpDataType.STRING,期望服务器返回的数据是字符串类型。 - 配置使用缓存(
usingCache: true)和 HTTP 协议版本为 HTTP/1.1(usingProtocol: http.HttpProtocol.HTTP1_1)。 - 监听 HTTP 响应头事件(
headersReceive),日志记录请求返回的 header 信息。 - 在请求完成时,成功响应会将结果展示在 UI 中
- 请求完成后销毁
httpRequest实例,确保资源释放。
- 使用
-
流式 HTTP 请求 (
sendStreamHttpRequest)- 使用
http.createHttp()创建一个 HTTP 请求对象httpRequest,并初始化一个空的ArrayBuffer(res)来接收流式响应数据。 - 订阅
headersReceive事件,输出响应头信息。 - 订阅
dataReceive事件,每次接收到流数据时,更新res(即通过拼接ArrayBuffer)以逐步存储响应内容,并记录当前接收的字节数。 - 订阅
dataEnd事件,指示流数据接收完毕,输出日志标明没有更多数据。 - 订阅
dataReceiveProgress事件,输出接收进度(已接收的数据大小和总大小)。 - 通过
httpRequest.requestInStream发送一个流式请求(POST 请求),请求体内容为"data to send"。 - 完成请求后,取消对各个事件的订阅,并销毁
httpRequest实例。
- 使用
-
HTTP 请求参数配置
- 请求方法:普通请求使用
http.RequestMethod.GET,流式请求使用http.RequestMethod.POST。 - 请求头:两种请求都设置了
Content-Type: application/json,说明请求体为 JSON 数据。 - 超时设置:连接和读取超时均为 60 秒,防止请求长时间挂起。
- 协议类型:请求使用
http.HttpProtocol.HTTP1_1,即 HTTP 1.1 协议。 - 缓存使用:使用缓存(
usingCache: true),减少重复请求时的延迟。
- 请求方法:普通请求使用
-
异常处理与状态更新
- 普通 HTTP 请求异常处理:在请求失败时,
err会被捕获,并将 UI 显示为“失败”,同时在日志中记录错误信息。 - 流式请求异常处理:在流式请求中,使用
catch捕获错误并更新testResult_002为“失败”,并输出详细错误信息。
- 普通 HTTP 请求异常处理:在请求失败时,
-
资源释放与请求销毁
- 每次请求结束后,无论是普通请求还是流式请求,都调用
httpRequest.destroy()终止请求任务,释放相关资源。 - 在流式请求中,响应数据的接收进度、完成和错误事件都通过订阅事件处理,确保最终销毁请求对象,防止内存泄漏。
- 每次请求结束后,无论是普通请求还是流式请求,都调用
-
HTTP拓展WebDav协议实现 (以MKCOL为例)
- 使用
http.createHttp()创建一个 HTTP 请求对象httpRequest。 - 配置
HttpRequestOptions.customMethod(拓展WebDav协议需配置自定义请求字段)为MKCOL。 - 配置
url为访问服务器中需要创建文件位置。 - 设置
expectDataType: http.HttpDataType.STRING,期望服务器返回的数据是字符串类型。 - 在请求完成时,成功响应会将结果展示在终端Log中,并且查看服务器可看到文件夹成功创建。
- 请求完成后销毁
httpRequest实例,确保资源释放。
- 使用
相关权限
依赖
不涉及。
约束与限制
- 本示例仅支持标准系统上运行,支持设备:Phone、PC/2in1、Tablet、TV、Wearable。
- 本示例为Stage模型,支持API23版本SDK,版本号:6.0.0。
- 本示例需要使用DevEco Studio Release(5.0.5.306)及以上版本才可编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/ > .git/info/sparse-checkout
git remote add origin https://gitcode.com/HarmonyOS_Samples/guide-snippets.git
git pull origin master



