2016-03-24 14 views
2

this issueの後に、私のコントローラのPOSTから生のボディを取得しましたが、エンコードがapplication/x-www-form-urlencodedに設定されているとボディのみが表示されます。 curlでテストすると、POST本体を読み取ることができますが、エンコードがtext/xmlに設定されていると、本体が空になります。私のrouter.exでは私が持っている:私のコントローラでフェニックスの生のHTTPリクエストボディを取得する

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で:

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

plug :copy_req_body 

私はので、私はよく分からないフェニックスとエリクサーに新たなんですこれをデバッグする方法。なぜHTTPリクエストのエンコーディングが生のボディデータの読み方と異なるのでしょうか?私のアプリケーションはtext/xmlを受け入れ、リクエスト本文を文字列として読み込む必要があります。

答えて

1

私はそれを理解しました。 code from hereでは、parseメソッドは符号化application/x-www-form-urlencodedを受け入れます。私は次のように変更しました:

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

これで動作します。

0

かなり簡単です。それが "間違っている"かどうかは分かりません。

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 
0

フェニックスは箱からそれを解析する必要があります。まず、正しいヘッダーを送信していることを確認してください。必要な操作はありません

-H 'content-type: application/json;charset=UTF-8' 
関連する問題