HTTP client behaviour.
headers() :: [{String.t(), String.t()}]
response() :: %{status_code: pos_integer(), body: binary()}
url() :: String.t()
request(url(), headers()) :: {:ok, response()} | {:error, any()}