【问题标题】:Elixir HttpPoison not working to send multipart/form-data requestsElixir Httpoison 无法发送多部分/表单数据请求
【发布时间】:2020-06-18 07:16:18
【问题描述】:

我有一个非常简单的请求,但看起来HttpPoison 无法解决这个问题。

请求有附件,所以我使用multipart/form-data 内容类型。

当我只发送文件时,请求工作正常,但我需要在请求中添加一些其他道具,这就是问题所在。

我的要求:

HTTPoison.post(
  "path.com/api/anything",
  {:multipart, [
    {
      :file,
      "/path/file.xlsx",
      {"form-data", [name: "file", filename: "file.xlsx"]}, []
    },
    {"taskName", "#{task.name}"},
    {"taskLink", "#{task.link}"}
  ]},
)

我收到文件没有问题,但taskNametaskLink 从未到达服务器。

(我用邮递员试过了,没问题)


与此相关的一些问题:

https://elixirforum.com/t/httpoison-post-multipart-with-more-form-than-the-file/4222/4 https://github.com/edgurgel/httpoison/issues/237

【问题讨论】:

  • 我尝试使用nc -l 9999 启动netcat 并向http://localhost:9999 发出此请求 - 我可以看到额外的字段。但是如果我向https://postman-echo.com/post 提出相同的请求,它似乎没有注意到这些字段。也许它(以及您使用的服务器)不喜欢 Hackney 发送 content-lengthcontent-type 标头?
  • 服务器正在使用节点...我认为您是对的,当我使用 axios (node) 发出请求时,一切正常。我将研究 hackney 和 axios 标头之间的区别。谢谢!

标签: http erlang elixir


【解决方案1】:

我们有一个多部分列表的工作示例,用于发送 zip 文件和其他属性。与此等效的方法可能对您有用。

[
  {"id", to_string(order_id)},
  {"file_size", to_string(file_size)},
  {"attachment", file, {"form-data", [name: "file", filename: filename]},
    [{"Content-Type", "application/zip"}]
  }
]

【讨论】:

  • 在我们的例子中,file 变量是内存中的二进制文件。
  • 我认为问题在于我的服务器(使用节点)不能很好地处理 HttpPoison(hackney)发送的某些标头。你能告诉我你在服务器上使用什么吗?谢谢!
  • 如果你的意思是在接收端,我不确定。我们正在从另一家公司发布到 API。我们使用的是 hackney 1.15.2 和 httpoison 0.13.0,所以看起来我们落后了很多。
猜你喜欢
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2018-03-05
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多