HarmonyOS 鸿蒙Next中一个流式请求方法
HarmonyOS 鸿蒙Next中一个流式请求方法
// 异步方法:发起HTTP请求获取数据
async getHttpData(queryData: string) {
// 在控制台打印查询字符串,用于调试
console.log('http getHttpData query:' + queryData);
// 创建QueryDataBean对象,作为请求体
let query: QueryDataBean = {
"inputs": {
"query": queryData // 将用户查询字符串放入请求体
}
}
// 创建HTTP请求对象
let httpRequest = http.createHttp();
// 监听'dataReceive'事件:当收到服务器数据时触发(流式响应)
httpRequest.on('dataReceive', (data: ArrayBuffer) => {
// try-catch块:捕获并处理可能出现的异常
try {
// 创建一个TextDecoder实例,用于将二进制数据解码为字符串
let decoder = util.TextDecoder.create('utf-8');
// 将ArrayBuffer转换为Uint8Array,然后解码为字符串
let stringData = decoder.decodeToString(new Uint8Array(data));
// 打印接收到的原始字符串数据
console.log('http 查询字符串结果:'+stringData);
// 检查接收到的数据是否包含"content"字段
if (stringData.includes("content")) {
// 清洗字符串:移除不需要的字符和前缀
let jsonStr=stringData.replace('data:','') // 移除SSE格式的"data:"前缀
.replaceAll('#','') // 移除所有#字符
.replaceAll('*','') // 移除所有*字符
.replaceAll('\uD83C\uDF0D',''); // 移除地球emoji字符
// 打印清洗后的字符串
console.log('http 转换后的字符串:'+jsonStr);
// 将JSON字符串解析为ResultsBean对象
let tempRes:ResultsBean = JSON.parse(jsonStr)
// 将解析出的content内容追加到现有的result中
this.result = this.result + tempRes.content
}
} catch (e) {
// 异常处理:当前为空,任何异常都会被静默忽略
// 在实际开发中,这里应该添加错误处理逻辑
}
});
// 配置HTTP请求选项
let streamInfo: http.HttpRequestOptions = {
method: http.RequestMethod.POST, // 请求方法为POST
header: { // 请求头
'Content-Type': 'application/json', // 内容类型为JSON
"X-Auth-Token": token // 认证令牌
},
extraData: JSON.stringify(query), // 请求体数据(转换为JSON字符串)
remoteValidation: 'skip', // 跳过远程验证(用于开发环境)
}
// 发起流式HTTP请求
httpRequest.requestInStream(url, streamInfo)
.then((data: number) => {
// 请求成功时的回调
console.log('http requestInStream ok!');
}).catch((error: BusinessError) => {
// 请求失败时的回调
// 当前为空,错误被静默忽略
// 在实际开发中,这里应该添加错误处理逻辑
})
}
更多关于HarmonyOS 鸿蒙Next中一个流式请求方法的实战教程也可以访问 https://www.itying.com/category-93-b0.html
学习了,先收藏。
学习了
在HarmonyOS Next中,流式请求方法通常指使用@ohos.net.http模块的createHttp()创建HttpClient实例,调用其request()方法并设置stream参数为true。这允许应用以流式方式接收响应数据,通过监听dataReceive事件逐步处理数据块,适用于处理大文件或实时数据流。
这段代码演示了在HarmonyOS Next中使用 @ohos.net.http 模块进行流式HTTP请求的基本方法,核心是 requestInStream 和 on('dataReceive') 事件监听。
关键点分析:
-
流式请求初始化:使用
http.createHttp()创建请求对象后,通过httpRequest.on('dataReceive', callback)监听数据块到达事件。这是处理服务器端推送(如SSE)或大文件下载的关键。 -
数据解码与处理:在
dataReceive回调中,数据以ArrayBuffer形式到达。代码使用util.TextDecoder将其解码为UTF-8字符串。这是标准做法。 -
请求配置:
HttpRequestOptions中的extraData用于设置POST请求体,remoteValidation: 'skip'通常在开发阶段用于跳过证书验证(生产环境应谨慎使用)。
需要注意的几点:
- 数据清洗逻辑:代码中对接收的字符串进行了替换操作(如移除
data:、#、*等)。这高度依赖于特定服务端的响应格式(似乎是SSE格式),不具备通用性。在实际应用中,应首先明确与服务器约定的数据协议(如纯JSON、SSE、自定义分隔符等),再进行解析。 - 错误处理:当前的
catch块和try-catch内的错误处理均为空,这在生产代码中是隐患。至少应记录错误日志或通知上层调用者。 - 资源释放:示例中没有展示
httpRequest.off('dataReceive')来取消事件监听以及httpRequest.destroy()来释放请求对象。在请求完成或组件销毁时,应执行这些清理操作以避免内存泄漏。 - 类型安全:
QueryDataBean和ResultsBean的类型定义在代码中未给出。确保这些接口与服务器端的请求/响应数据结构严格匹配,这对于维护代码很重要。
总结: 这段代码提供了流式请求的骨架。要用于生产,需要完善错误处理、资源管理,并根据实际网络协议调整数据解析逻辑。

