HarmonyOS 鸿蒙Next中发送 POST 请求如何得到二进制数据
在使用@ohos/axios中,可以使用transformRequest()方法来修改请求头
{
url: '/user',
method: 'get',
baseURL: 'https://www.xxx.com/info',
// `transformRequest` 允许在向服务器发送前,修改请求数据
// 它只能用于 'PUT', 'POST' 和 'PATCH' 这几个请求方法
// 数组中最后一个函数必须返回一个字符串, 一个Buffer实例,ArrayBuffer,FormData,或 Stream
// 修改请求头。
transformRequest: [(data: ESObject, headers: AxiosRequestHeaders) => {
// 对发送的 data 进行任意转换处理
return data;
}],
}
三方库地址:[@ohos/axios(V2.2.6)](https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Faxios)
更多关于HarmonyOS 鸿蒙Next中发送 POST 请求如何得到二进制数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
源码内默认转json了。

如果需要二进制内容,那可以传对应的数据类型进去

还有一种方法:自定义transformRequest这个方法,这个方法可以处理发送请求的参数,处理完return结果就可以了。
在HarmonyOS Next中,通过@ohos.net.http模块发送POST请求获取二进制数据。使用http.createHttp()创建请求对象,在request方法中设置responseType: http.ResponseType.ARRAY_BUFFER。成功回调的响应对象中,result属性即为ArrayBuffer类型的二进制数据。
在HarmonyOS Next中,发送POST请求时若希望请求体为原始二进制数据(而非自动序列化为JSON),关键在于正确设置请求头Content-Type,并确保数据以ArrayBuffer或Uint8Array形式发送。以下以@kit.NetworkKit的http模块为例说明:
- 设置请求头:将
Content-Type明确指定为application/octet-stream,这表示请求体是纯二进制流。 - 发送数据:直接传递
Uint8Array或ArrayBuffer作为请求体,无需额外处理。
示例代码:
import { http } from '@kit.NetworkKit';
async function sendBinaryData(url: string, binaryData: Uint8Array) {
let request: http.HttpRequest = {
method: http.RequestMethod.POST,
header: { 'Content-Type': 'application/octet-stream' },
extraData: binaryData.buffer, // 使用ArrayBuffer
connectTimeout: 60000,
readTimeout: 60000,
};
try {
let response = await http.request(url, request);
console.log('Response:', response.result);
} catch (error) {
console.error('Request failed:', error);
}
}
注意事项:
- 使用
@ohos/axios时,同样需设置headers: { 'Content-Type': 'application/octet-stream' },并将数据作为ArrayBuffer传递。 - 避免依赖库的默认序列化行为;设置
Content-Type为application/octet-stream可强制以二进制形式发送。 - 抓包工具显示的格式取决于请求头设置,正确设置后应能看到原始二进制数据。
此方法确保二进制数据按预期发送,不会转换为JSON字符串。

