【问题标题】:How to transform CURL request to Httpoison request in Elixir Phoenix如何在 Elixir Phoenix 中将 CURL 请求转换为 Httpoison 请求
【发布时间】:2019-05-06 04:13:12
【问题描述】:

我正在尝试在 Elixir Phoenix 中使用 HTTPoison 转换 CURL 请求。 当我运行 CURL 请求推荐时,它工作正常。当我尝试使用 HTTPoison 时出现“415 Unsupported media type”错误。

Phoenix/Elixir - cURL works, but HTTPoison fails

这是我的 CURL 请求

curl -u "user:password" -i -H "Accept:application/json" -X POST -d
 "amount=100&method=0&type=bank&receiver=CCC&info1=hello" 
 http://00.000.000.00:8080/services/id/999999111999/calculate

这是我的 Httpoison 请求

url = "myurl"
orderid = "myorderid"
headers = ["Accept", "application/json"]
request_body = '{"type" : "bank", 
         "method" : 0,
         "amount" : #{amount},
                 "receiver" : "CCC"
         "info1" : #{orderid}}'
dicoba = HTTPoison.post(url, headers, request_body, hackney: [basic_auth: {"#{user}", "#password"}]) |> IO.inspect

【问题讨论】:

  • 我怀疑HTTPoisonrequest_body 参数中支持lists,而你的确实是一个列表而不是字符串。 Elixir 中的单引号并不符合您的预期。请改用~s sigil。

标签: curl elixir phoenix httpoison


【解决方案1】:

curl 请求的内容类型为 application/x-www-form-urlencoded,但是您的 HTTPoison 请求格式不正确。您将 charlist 传递给请求正文,HTTPoison 需要二进制文件,但您没有指定请求的内容类型。

要创建 application/x-www-form-urlencoded 请求正文,您可以使用函数URI.encode_query/1

url = "http://00.000.000.00:8080/services/id/999999111999/calculate"
payload = %{
  "amount" => 100,
  "method" => 0,
  "type" => "bank",
  "receiver" => "CCC",
  "info1" => "hello"
}
request_body = URI.encode_query(payload)
headers = [
  {"Accept", "application/json"}, 
  {"Content-Type", "application/x-www-form-urlencoded; charset=utf-8"}
]
dicoba = HTTPoison.post(url, request_body, headers, hackney: [basic_auth: {"#{user}", "#password"}])

【讨论】:

  • 感谢您的回答。但是我收到了 400 状态的错误消息。 body: "{\"errorMessage\":\"COUNT_VIOLATED_ERROR\",\"errorCode\":\"99999999\"}"
  • COUNT_VIOLATED_ERROR 是什么意思?
  • @Aetherus 我认为request_body comesheaders之前HTTPoison.post(url, request_body, headers, hackney: [basic_auth: {"#{user}", "#password"}])
  • @Aetherus 真棒,其他谢谢,我喜欢你的解决方案,它有帮助
猜你喜欢
  • 2020-02-26
  • 2019-06-28
  • 2018-04-16
  • 2021-02-06
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 2023-02-14
相关资源
最近更新 更多