How do you put a request body in a Plug.Conn?

Would something like this conn = %{conn | body_params: body} work for you?

setup %{conn: conn} do
  body_params = %{"some" => "message"}
  signature =
    body_params
    |> Poison.encode!()
    |> Plug.Crypto.MessageVerifier.sign("s3cret", :sha256)
  conn =
    conn
    |> put_req_header("accept", "application/json")
    |> put_req_header("content-type", "application/json")
    |> put_req_header("x-request-signature", signature)
    |> put_body_params(body_params)
  {:ok, conn: conn}
end

defp put_body_params(conn, body_params) do
  %{conn | body_params: body_params}
end

Or as a workaround you might put your body in conn.private.

1 Like