在Phoenix中获取原始HTTP请求正文

时间:2016-03-24 13:51:53

标签: elixir phoenix-framework

我已经跟随this issue从我的控制器中的POST获取原始主体,但只有在编码设置为git merge时才显示正文。当我使用application/x-www-form-urlencoded进行测试时,我可以读取POST主体,但是当编码设置为curl时,正文显示为空。在我的text/xml我有:

router.ex

在我的控制器中我有:

pipeline :api do
  plug :accepts, ["xml"]
end

def parse(conn, params) do xml = conn.private[:raw_body] Logger.debug(xml) text conn, xml end

endpoint.ex

我是Phoenix和Elixir的新手,所以我不确定如何调试它。为什么HTTP请求的编码会对原始数据的读取产生影响?我的应用程序需要接受def copy_req_body(conn, _) do Plug.Conn.put_private(conn, :copy_raw_body, true) end plug :copy_req_body 并将请求正文作为字符串读取。

3 个答案:

答案 0 :(得分:4)

非常简单的方式。但不确定它是否“错误”。

defmodule YourApp.YourController do
  use YourApp.Web, :controller

  def receive_obm(conn, params) do
    {:ok, body, _conn} = Plug.Conn.read_body(conn)

    IO.inspect(body)
  end
end

答案 1 :(得分:2)

我明白了。在code from here中,parse方法接受编码application/x-www-form-urlencoded。我改成了这个:

def parse(conn, "text", "xml", _headers, opts) do
...
end

现在它有效。

答案 2 :(得分:0)

凤凰应该开箱即用。检查您是否首先发送了正确的标头。无需采取任何行动

-H 'content-type: application/json;charset=UTF-8'