我已经跟随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
并将请求正文作为字符串读取。
答案 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'