HttpClient
HttpClient: high-level composable HTTP client with step pipeline.
This is Layer 3 of March's HTTP library. It provides a Req-style three-phase pipeline (request steps, response steps, error steps) built on top of HttpTransport.
Usage: let client = HttpClient.new_client() |> HttpClient.add_request_step("auth", HttpClient.Steps.bearer_auth("my-token")) |> HttpClient.with_redirects(5) let resp = HttpClient.get(client, "http://api.example.com/users")
Types
Functions
Create a new bare client with no steps and no redirect/retry.
Run a request through the full step pipeline.
- Run request steps left-to-right
- Send via HttpTransport.request (with retry if configured)
- Handle redirects if configured
- Run response steps left-to-right
- On error, run error steps (first Recover wins)
Returns a request step that sets a base URL on requests.
Returns a request step that adds HTTP Basic authorization header.
Returns a request step that adds a Bearer token authorization header.
Returns a request step that sets the Content-Type header.
Request step: add default User-Agent and Accept headers.
Response step: return Err for 4xx/5xx status codes.
Stream a GET response body. Calls on_chunk(chunk_string) for each chunk as it arrives over the wire. Returns Ok((status, headers, last_result)) where last_result is the return value of the final on_chunk call.
Example:
HttpClient.stream_get(client, "http://example.com/bigfile", fn(chunk) ->
print("got " ++ int_to_string(string_length(chunk)) ++ " bytes")
end)Open a keep-alive connection and run a function with it. The function receives a do_request callback that sends requests on the shared connection. Connection is closed when done.
Example:
HttpClient.with_connection(client, "http://api.example.com", fn(do_request) -> do
let r1 = do_request(Http.get_request("/users"))
let r2 = do_request(Http.get_request("/posts"))
(r1, r2)
end
end)