defmodule Client do #generate 4 function get/1, get!/1 post/1 post!/1 function use Maxwell.Builder, ~w(get post)a middleware Maxwell.Middleware.BaseUrl, "http://httpbin.org" middleware Maxwell.Middleware.Headers, %{"Content-Type" => "application/json"} middleware Maxwell.Middleware.Opts, [connect_timeout: 10000, recv_timeout: 20000] middleware Maxwell.Middleware.Json middleware Maxwell.Middleware.Logger adapter Maxwell.Adapter.Hackney @doc """ Simple get request get origin ip """ def get_ip() do new |> put_path("/ip") |> get! |> get_resp_body("origin") end @doc """ Post whole file once ###Example Client.post_file_once("./mix.exs") """ def post_file_once(filepath) do new |> put_path("/post") |> put_req_body({:file, filepath}) |> post! |> get_resp_body("data") end @doc """ Post whole file by chunked ###Example Client.post_file_chunked("./mix.exs") """ def post_file_chunked(filepath) do new |> put_path("/post") |> put_req_header("transfer_encoding", "chunked") |> put_req_body({:file, filepath}) |> post! |> get_resp_body("data") end @doc """ Post by stream ###Example ["1", "2", "3"] |> Stream.map(fn(x) -> List.duplicate(x, 2) end) |> Client.post_stream """ def post_stream(stream) do new |> put_path("/post") |> put_req_body(stream) |> post! |> get_resp_body("data") end @doc """ Post multipart form ###Example Client.post_multipart_form({:multipart, [{:file, "./mix.exs"}]}) """ def post_multipart_form(multipart) do new |> put_path("/post") |> put_req_body(multipart) |> post! |> get_resp_body("data") end end