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

Ree*_*Law 3 elixir phoenix-framework

我已经解决这个问题,以便从控制器中的POST获取原始主体,但是仅当编码设置为时,主体才会显示application/x-www-form-urlencoded。当我进行测试时,curl我可以读取POST正文,但是当编码设置为时,正文显示为空text/xml。在我的router.ex我有:

pipeline :api do
  plug :accepts, ["xml"]
end
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有:

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

endpoint.ex

def copy_req_body(conn, _) do
  Plug.Conn.put_private(conn, :copy_raw_body, true)
end

plug :copy_req_body
Run Code Online (Sandbox Code Playgroud)

我是Phoenix和Elixir的新手,所以不确定如何调试它。为什么HTTP请求的编码会影响原始数据的读取?我的应用程序需要接受text/xml并以字符串形式读取请求正文。

Jus*_*age 5

很简单的方法。不确定是否“错误”。

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
Run Code Online (Sandbox Code Playgroud)