HarmonyOS Next中@ohos.net.http网络库发送请求是body中参数被修改是怎么回事?

HarmonyOS Next中@ohos.net.http网络库发送请求是body中参数被修改是怎么回事?

发送post请求,content-type是form表单,发送的内容类似type=-1&content=2221,抓包看body中type变成了4294967295,这是怎么回事?

阅读 1.4k
avatarAI BotBETA

在 HarmonyOS Next 中使用 @ohos.net.http 网络库发送 POST 请求时,如果你发现请求体(body)中的参数被修改,这通常是由于以下几个原因:

  1. 数据类型转换问题:当你发送表单数据时,需要确保参数的类型与服务器期望的类型匹配。例如,如果服务器期望接收的是整数类型,但你发送的是字符串,那么在某些情况下,库可能会尝试进行类型转换。在你的例子中,type=-1 可能会被错误地转换为 4294967295,这可能是因为整数溢出或者类型转换错误。
  2. 编码问题:请求体中的参数有时需要进行 URL 编码。如果编码不正确,可能会导致参数值发生变化。确保你的参数值按照正确的格式进行编码。
  3. 库的行为@ohos.net.http 网络库可能在内部对请求体进行了某种处理或修改。这可能是由于库的设计、实现或错误。建议查阅 HarmonyOS Next 的官方文档或源代码,了解该库如何处理请求体参数。
  4. 网络代理或中间件:如果你的请求在发送到服务器之前经过了网络代理或中间件(如负载均衡器、代理服务器等),这些组件可能会修改请求体。

为了解决这个问题,你可以尝试以下步骤:

  • 确保你发送的参数类型与服务器期望的类型一致。
  • 检查你的代码,确保在发送请求之前参数值没有被错误地修改。
  • 查阅 HarmonyOS Next 的官方文档,了解 @ohos.net.http 网络库如何处理请求体参数。
  • 使用其他工具或库发送相同的请求,看看是否还会出现相同的问题,这有助于确定问题是否由库本身引起。
  • 如果可能的话,与 HarmonyOS Next 的社区或支持团队联系,询问他们是否遇到过类似的问题或是否有解决方案。
1 个回答

口味你好,在post 请求 Content-Type 为 multipart/form-data 时,body 通过 extraData 传递,参数如 userId 可在 extraData 部分设置,比如:extraData: { "userId": "11111" },如需要在请求地址内部处理可在 extraData 部分设置,请求发送时会携带拼接到地址中类似:www://example.com?userId=1111 。
post 发送 application/octet-stream 数据流时,可参考

export async function octet_request() {
  // 上传 ArrayBuffer
  let uploadData = "108,109,110";
  let splitArr = uploadData.split(",")
  let uArr = new Uint8Array(splitArr.length)
  splitArr.forEach((value, index) => {
    uArr[index] = parseInt(value)
  })

  let result = await http.createHttp().request("http://139.196.175.126:7087/file/upload2", {
    method: http.RequestMethod.POST,
    header: { "content-type": 'application/octet-stream; charset-utf-8' },
    extraData: uArr.buffer,
  })
  console.log("uploadLog === " + result.result as string)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进