【问题标题】:Unable to make HTTP Post request using elixir?无法使用 elixir 发出 HTTP Post 请求?
【发布时间】:2016-07-13 15:48:25
【问题描述】:

我正在尝试的代码是:-

response = HTTPotion.post(url, [body: "{channel: \"#bot\", username: \"watson\", text: \"test\"}"])

我得到的回应是:-

%HTTPotion.Response{body: "invalid_payload",......, status_code: 400}

【问题讨论】:

  • 你做了一个发布请求,它返回了。问题是服务器以“错误请求”响应。您可能需要向服务器发送其他内容,这不是 elixir 的问题,而是消息内容。
  • 这是有效的示例 curl 请求:- curl -X POST url -d '{"channel": "bot", "username": "ab", "text": "test" }'
  • 我只想知道在请求中发送数据参数
  • 在您的请求中,channelusernametext 用引号括起来。在您的 Elixir 代码中尝试相同的操作。这可能会阻止服务器正确解析请求。
  • 是的,它就是这样工作的。现在,我面临的另一个问题是我无法获取体内的变量。例如:- #bot,我想从变量中获取

标签: http elixir


【解决方案1】:

您提出了一个成功的请求,但正文错误。在 JSON 中,字段名称应该有引号:

[body: "{\"channel\": \"#{bot}\", \"username\": \"watson\", \"text\": \"test\"}"]

另外,字符串插值的语法是#{variable_name},例如:

iex(1)> bot = "mybot"
iex(2)> "#{bot}"

手动编码 JSON 容易出错,因此您可能希望使用 Poison

iex(3)> Poison.encode!(%{bot: bot, username: "watson", text: "test"})
"{\"username\":\"watson\",\"text\":\"test\",\"bot\":\"mybot\"}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 2011-04-10
    • 2020-09-17
    • 1970-01-01
    • 2017-11-28
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多