HarmonyOS 鸿蒙Next:ArkTs 下网络请求使用 Post 表单传参时,Content-Type 设置为 multipart/form-data,按文档说明传参但参数无法传递到后台
HarmonyOS 鸿蒙Next:ArkTs 下网络请求使用 Post 表单传参时,Content-Type 设置为 multipart/form-data,按文档说明传参但参数无法传递到后台
//请求的配置 let requestOption = { method: http.RequestMethod.POST, header: { ‘Content-Type’: ‘multipart/form-data’ }, //POST 请求的body extraData: {“data”:{request:encyData} }, //返回数据类型 expectDataType: http.HttpDataType.STRING, usingCache:false, connectTimeout: 30_000, readTimeout: 30_000 } return new Promise<T>((resolve, reject) => { httpRequest.request(finalUrl, requestOption, (err, data) => { if (!err) { if (HttpUtils.DEBUG) { // data.result为HTTP响应内容,可根据业务需要进行解析 console.info(‘Result:’ + JSON.stringify(data.result) + “\n” + ‘code:’ + JSON.stringify(data.responseCode) + “\n” + ‘header:’ + JSON.stringify(data.header) + “\n” + ‘cookies:’ + JSON.stringify(data.cookies)); } let bean: T = JSON.parse(JSON.stringify(data.result)) resolve(bean) // 取消订阅HTTP响应头事件 httpRequest.off(‘headersReceive’); // 当该请求使用完毕时,调用destroy方法主动销毁 httpRequest.destroy(); } else { if (HttpUtils.DEBUG) { console.info(‘error:’ + JSON.stringify(err)); } reject(err) // 取消订阅HTTP响应头事件 httpRequest.off(‘headersReceive’); // 当该请求使用完毕时,调用destroy方法主动销毁。 httpRequest.destroy(); } }) })
更多关于HarmonyOS 鸿蒙Next:ArkTs 下网络请求使用 Post 表单传参时,Content-Type 设置为 multipart/form-data,按文档说明传参但参数无法传递到后台的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
尝试了,带文件的不行,抓包会被截取,有没有别的办法?
更多关于HarmonyOS 鸿蒙Next:ArkTs 下网络请求使用 Post 表单传参时,Content-Type 设置为 multipart/form-data,按文档说明传参但参数无法传递到后台的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
怎么拼二进制数据和文本呢
问题已经解决,处理方式是手动创建 multipart/form-data
下的请求体,具体方式如下:
/**
* 构建post 请求参数
* @returns
*/
static buildFormData(content: string): FormData {
let formData = new FormData()
let splitStr = "f76d642e-a125-49b8-a90e-4cc887a758b1" // 这个要随机生成一个 uuid
formData.contentType = "multipart/form-data; boundary=" + splitStr
formData.body = "--" + splitStr + "\r\n" +
"Content-Disposition: form-data; name=\"request\"" + "\r\n" +
"Content-Length: " + content.length + "\r\n\r\n" +
content + "\r\n" +
"--" + splitStr + "--"
return formData
}
//请求的配置
let requestOption = {
method: http.RequestMethod.POST,
header: {
'Content-Type': formData.contentType
},
//POST 请求的body
extraData: formData.body,
//返回数据类型
expectDataType: http.HttpDataType.STRING,
usingCache: false,
connectTimeout: 30_000,
readTimeout: 30_000
}
多个参数,body怎么写?
多个参数的自己搞出来了。
static buildFormData(data?: object): FormData {
let boundary = util.generateRandomUUID(false);
let contentType = "multipart/form-data; boundary=" + boundary
let body = "--" + boundary
if (data && typeof data === 'object') {
let entries: [string, string][] = Object.entries(data);
entries.forEach((keyValues: [key: string,value: string], index: number) => {
const key: string = keyValues[0]
const value: string = keyValues[1]
body += "\r\n"+"Content-Disposition: form-data; name=\"" + key + "\"" + "\r\n" +
"Content-Length: " + value.length + "\r\n\r\n" +
value + "\r\n"
body += "--" + boundary
});
body += '--'
}
return { contentType, body }
}
按照这么传,我下面还有一个multiFormDataList,发现extraData传过去了,但是文件没传过去,还需要做什么处理嘛,
期待大佬回复
对不起,您的内容似乎不包含实际的HTML代码。请您提供具体的HTML内容以便我可以将其转换为Markdown格式。
大佬,我怎么没有这个类啊FormData,
自己定义的一个类,里面就body 和 contentType 两个属性,
在HarmonyOS鸿蒙Next的ArkTs框架中,当你使用Post表单传参且需要将Content-Type设置为multipart/form-data时,如果参数无法传递到后台,通常是因为表单数据的格式构建不正确或者请求头设置有误。
请确保以下几点:
-
表单数据构建:使用正确的multipart/form-data格式构建表单数据。这通常涉及到为每个表单字段创建一个part,包括字段名和字段值,并且每个part之间需要有正确的边界分隔符。
-
请求头设置:Content-Type头部不仅需要设置为multipart/form-data,还需要包含boundary参数,该参数的值应与表单数据中使用的边界分隔符相匹配。
-
检查后端接收:确认后端服务器能够正确解析multipart/form-data格式的请求体,包括字段名和字段值的编码等。
-
调试和日志:开启客户端和服务器的详细日志记录,检查请求的实际发送内容和服务器接收到的内容,以便定位问题。
如果以上步骤均正确无误,但问题依旧存在,可能是ArkTs框架或相关库的bug。此时,建议直接联系官网客服以获取更专业的帮助。
如果问题依旧没法解决请联系官网客服, 官网地址是:https://www.itying.com/category-93-b0.html,