March Docs

Http

Http module: pure HTTP protocol types, constructors, and transforms.

This is Layer 1 of March's HTTP library. It contains no I/O — only data types and functions for building and inspecting HTTP requests and responses. Libraries that work with HTTP types depend on this alone.

Types

typeMethodMethod = Get | Post | Put | Patch | Delete | Head | Options | Trace | Connect | Other(String)#
typeSchemeScheme = SchemeHttp | SchemeHttps#
typeStatusStatus = Status(Int)#
typeHeaderHeader = Header(String, String)#
typeUrlErrorUrlError = InvalidScheme(String) | MissingHost | InvalidPort(String) | MalformedUrl(String)#
typeRequestRequest(body) = Request(Method, Scheme, String, Option(Int), String, Option(String), List(Header), body)#
typeResponseResponse(body) = Response(Status, List(Header), body)#

Functions

fnbodybody(req : Request(b)) : b#
fndeletedelete(url : String) : Result(Request(Unit), UrlError)#
fnencode_queryencode_query(params : List((String, String))) : String#
fngetget(url : String) : Result(Request(Unit), UrlError)#
fnget_headerget_header(resp : Response(b), name : String) : Option(String)#
fnget_request_headerget_request_header(req : Request(b), name : String) : Option(String)#
fnheadhead(url : String) : Result(Request(Unit), UrlError)#
fnheadersheaders(req : Request(b)) : List(Header)#
fnhosthost(req : Request(b)) : String#
fnis_client_erroris_client_error(s : Status) : Bool#

True for client-error 4xx statuses (caller's fault).

Examples

    march> Http.is_client_error(Http.status_not_found())
    true
    march> Http.is_client_error(Http.status_server_error())
    false
fnis_informationalis_informational(s : Status) : Bool#

True for informational 1xx statuses.

Examples

    march> Http.is_informational(Status(100))
    true
    march> Http.is_informational(Status(200))
    false
fnis_redirectis_redirect(s : Status) : Bool#

True for redirect 3xx statuses.

Examples

    march> Http.is_redirect(Http.status_moved())
    true
    march> Http.is_redirect(Http.status_ok())
    false
fnis_server_erroris_server_error(s : Status) : Bool#

True for server-error 5xx statuses (server's fault).

Examples

    march> Http.is_server_error(Http.status_server_error())
    true
    march> Http.is_server_error(Http.status_not_found())
    false
fnis_successis_success(s : Status) : Bool#

True for success 2xx statuses.

Examples

    march> Http.is_success(Http.status_ok())
    true
    march> Http.is_success(Http.status_not_found())
    false
fnmethodmethod(req : Request(b)) : Method#
fnmethod_to_stringmethod_to_string(m : Method) : String#

Render an HTTP method as its uppercase wire-format string. Other(s) returns its inner string verbatim — useful for non-standard extensions like MKCOL or PROPFIND (WebDAV) which an upstream parser may have wrapped in Other(...).

Examples

    march> Http.method_to_string(Get)
    "GET"
    march> Http.method_to_string(Patch)
    "PATCH"
    march> Http.method_to_string(Other("MKCOL"))
    "MKCOL"
fnoptionsoptions(url : String) : Result(Request(Unit), UrlError)#
fnparse_urlparse_url(url : String) : Result(Request(Unit), UrlError)#
fnpatchpatch(url : String, bdy : b) : Result(Request(b), UrlError)#
fnpathpath(req : Request(b)) : String#
fnportport(req : Request(b)) : Option(Int)#
fnpostpost(url : String, bdy : b) : Result(Request(b), UrlError)#
fnputput(url : String, bdy : b) : Result(Request(b), UrlError)#
fnqueryquery(req : Request(b)) : Option(String)#
fnresponse_bodyresponse_body(resp : Response(b)) : b#
fnresponse_headersresponse_headers(resp : Response(b)) : List(Header)#
fnresponse_is_redirectresponse_is_redirect(resp : Response(b)) : Bool#
fnresponse_is_successresponse_is_success(resp : Response(b)) : Bool#
fnresponse_statusresponse_status(resp : Response(b)) : Status#
fnresponse_status_coderesponse_status_code(resp : Response(b)) : Int#
fnschemescheme(req : Request(b)) : Scheme#
fnset_bodyset_body(req : Request(a), new_body : b) : Request(b)#
fnset_headerset_header(req : Request(b), name : String, value : String) : Request(b)#

Prepend a header to req. The name and value are sanitized: NUL, CR, and LF bytes are removed to block CRLF-injection attacks even when the inputs come from untrusted sources. See sanitize_header_part/1.

fnset_hostset_host(req : Request(b), new_host : String) : Request(b)#
fnset_methodset_method(req : Request(b), m : Method) : Request(b)#
fnset_pathset_path(req : Request(b), new_path : String) : Request(b)#
fnset_portset_port(req : Request(b), new_port : Int) : Request(b)#
fnset_queryset_query(req : Request(b), params : List((String, String))) : Request(b)#
fnset_schemeset_scheme(req : Request(b), s : Scheme) : Request(b)#
fnstatus_bad_requeststatus_bad_request() : Status do Status(400) end#

Status 400 Bad Request.

fnstatus_codestatus_code(s : Status) : Int#

Extract the integer status code from a Status.

Examples

    march> Http.status_code(Http.status_ok())
    200
    march> Http.status_code(Status(418))
    418
fnstatus_createdstatus_created() : Status do Status(201) end#

Status 201 Created.

fnstatus_forbiddenstatus_forbidden() : Status do Status(403) end#

Status 403 Forbidden.

fnstatus_foundstatus_found() : Status do Status(302) end#

Status 302 Found.

fnstatus_movedstatus_moved() : Status do Status(301) end#

Status 301 Moved Permanently.

fnstatus_no_contentstatus_no_content() : Status do Status(204) end#

Status 204 No Content.

fnstatus_not_foundstatus_not_found() : Status do Status(404) end#

Status 404 Not Found.

fnstatus_okstatus_ok() : Status do Status(200) end#

Status 200 OK.

fnstatus_server_errorstatus_server_error() : Status do Status(500) end#

Status 500 Internal Server Error.

fnstatus_unauthorizedstatus_unauthorized() : Status do Status(401) end#

Status 401 Unauthorized.