Client is a HTTP/1.1 client.

type host = string * int option

Represents a server host - as ip address or domain name - and an optional port value, e.g.,

type resource_path = string

Represents HTTP request resource path, e.g. "/shop/purchase", "/shop/items", "/shop/categories/" etc.

type 'a body_disallowed_call = ?version:Http.Version.t -> ?headers:Http.Header.t -> conn:Eio.Flow.two_way as 'a -> host -> resource_path -> response

body_disallowed_call denotes HTTP client calls where a request is not allowed to have a request body.

type 'a body_allowed_call = ?version:Http.Version.t -> ?headers:Http.Header.t -> ?body:Body.t -> conn:Eio.Flow.two_way as 'a -> host -> resource_path -> response

body_allowed_call denotes HTTP client calls where a request can optionally have a request body.

Generic HTTP call

val call : ?meth:Http.Method.t -> ?version:Http.Version.t -> ?headers:Http.Header.t -> ?body:Body.t -> conn:Eio.Flow.two_way -> host -> resource_path -> response

HTTP Calls with Body Disallowed

val head : 'a body_disallowed_call
val delete : 'a body_disallowed_call

HTTP Calls with Body Allowed

val post : 'a body_allowed_call
val put : 'a body_allowed_call
val patch : 'a body_allowed_call

Response Body

val read_fixed : response -> string

read_fixed (response,reader) is body_content, where body_content is of length n if "Content-Length" header exists and is a valid integer value n in response. Otherwise body_content holds all bytes until eof.

val read_chunked : response -> (Body.chunk -> unit) -> Http.Header.t option

read_chunked response chunk_handler is Some updated_headers if "Transfer-Encoding" header value is "chunked" in response and all chunks in reader are read successfully. updated_headers is the updated headers as specified by the chunked encoding algorithm in https: //

reader is updated to reflect the number of bytes read.

Returns None if Transfer-Encoding header in headers is not specified as "chunked"