可以使用requestInStream来解决问题,具体在官网文档处了解,链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/http-request-V5\#requestinstream%E6%8E%A5%E5%8F%A3%E5%BC%80%E5%8F%91%E6%AD%A5%E9%AA%A4//参考demo如下 import { rcp } from "@kit.RemoteCommunicationKit"; import { BusinessError } from '@kit.BasicServicesKit'; import { promptAction } from '@kit.ArkUI'; import http from '@ohos.net.http'; import { util } from '@kit.ArkTS'; @Entry @Component struct Index { @State message: string = 'Hello World'; get() { // 每一个httpRequest对应一个HTTP请求任务,不可复用 let httpRequest = http.createHttp(); // 用于订阅HTTP响应头事件 httpRequest.on('headersReceive', (header: Object) => { console.info('header: ' + JSON.stringify(header)); }); // 用于订阅HTTP流式响应数据接收事件 let res = new ArrayBuffer(0); httpRequest.on('dataReceive', (data: ArrayBuffer) => { const newRes = new ArrayBuffer(res.byteLength + data.byteLength); const resView = new Uint8Array(newRes); resView.set(new Uint8Array(res)); resView.set(new Uint8Array(data), res.byteLength); res = newRes; console.info('res length: ' + res.byteLength); let textDecoder = util.TextDecoder.create('utf-8'); let val = textDecoder.decodeWithStream(resView as Uint8Array); //在此处获取请求内容 console.info('请求获取的内容为: ' + val); }); // 用于订阅HTTP流式响应数据接收完毕事件 httpRequest.on('dataEnd', () => { console.info('No more data in response, data receive end'); }); // 用于订阅HTTP流式响应数据接收进度事件 class Data { receiveSize: number = 0; totalSize: number = 0; } httpRequest.on('dataReceiveProgress', (data: Data) => { console.log("dataReceiveProgress receiveSize:" + data.receiveSize + ", totalSize:" + data.totalSize); }); let streamInfo: http.HttpRequestOptions = { method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET // 开发者根据自身业务需要添加header字段 // header: { // 'Content-Type': 'application/json' // }, // 当使用POST请求时此字段用于传递请求体内容,具体格式与服务端协商确定 // extraData: "data to send", expectDataType: http.HttpDataType.STRING,// 可选,指定返回数据的类型 usingCache: true, // 可选,默认为true priority: 1, // 可选,默认为1 connectTimeout: 60000, // 可选,默认为60000ms readTimeout: 60000, // 可选,默认为60000ms。若传输的数据较大,需要较长的时间,建议增大该参数以保证数据传输正常终止 usingProtocol: http.HttpProtocol.HTTP1_1 // 可选,协议类型默认值由系统自动指定 } httpRequest.requestInStream( // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定 "url地址", streamInfo, (err: BusinessError, data: number) => { console.error('error:' + JSON.stringify(err)); console.info('ResponseCode :' + JSON.stringify(data)); // 取消订阅HTTP响应头事件 httpRequest.off('headersReceive'); // 取消订阅HTTP流式响应数据接收事件 httpRequest.off('dataReceive'); // 取消订阅HTTP流式响应数据接收进度事件 httpRequest.off('dataReceiveProgress'); // 取消订阅HTTP流式响应数据接收完毕事件 httpRequest.off('dataEnd'); // 当该请求使用完毕时,调用destroy方法主动销毁 httpRequest.destroy(); } ); } build() { Column() { Button('点击一下').onClick(()=>{ this.get() promptAction.showToast({message:'方法已执行'}) }) } .justifyContent(FlexAlign.Center) .height('100%') .width('100%') } }
可以使用requestInStream来解决问题,具体在官网文档处了解,链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/http-request-V5\#requestinstream%E6%8E%A5%E5%8F%A3%E5%BC%80%E5%8F%91%E6%AD%A5%E9%AA%A4