Reference Manual

Version 7.0.6

Table of Contents




Module Summary

URI utility module


Module http_uri was introduced in OTP R15B01.


This module provides utility functions for working with URIs, according to RFC 3986.


Type definitions that are used more than once in this module:

boolean() = true | false

string() = list of ASCII characters


Type definitions that are related to URI:

uri() = string() | binary()

Syntax according to the URI definition in RFC 3986, for example, ""

user_info() = string() | binary()

scheme() = atom()

Example: http, https

host() = string() | binary()

port() = inet:port_number()

path() = string() | binary()

Represents a file path or directory path

query() = string() | binary()

fragment() = string() | binary()

For more information about URI, see RFC 3986.


OTP R15B01


HexEncodedURI = string() | binary() - A possibly hexadecimal encoded URI
URI = uri()

Decodes a possibly hexadecimal encoded URI.

OTP R15B01


URI = uri()
HexEncodedURI = string() | binary() - Hexadecimal encoded URI

Encodes a hexadecimal encoded URI.

OTP R15B01
OTP R15B01


URI = uri()
Options = [Option]
Option = {ipv6_host_with_brackets, boolean()} | {scheme_defaults, scheme_defaults()} | {fragment, boolean()} | {scheme_validation_fun, fun()}
Result = {Scheme, UserInfo, Host, Port, Path, Query} | {Scheme, UserInfo, Host, Port, Path, Query, Fragment}
Scheme = scheme()
UserInfo = user_info()
Host = host()
Port = inet:port_number()
Path = path()
Query = query()
Fragment = fragment()
Reason = term()

Parses a URI. If no scheme defaults are provided, the value of the scheme_defaults function is used.

When parsing a URI with an unknown scheme (that is, a scheme not found in the scheme defaults), a port number must be provided, otherwise the parsing fails.

If the fragment option is true, the URI fragment is returned as part of the parsing result, otherwise it is ignored.

Scheme validation fun is to be defined as follows:

fun(SchemeStr :: string() | binary()) ->
	valid |	{error, Reason :: term()}.

It is called before scheme string gets converted into scheme atom and thus possible atom leak could be prevented


The scheme portion of the URI gets converted into atom, meaning that atom leak may occur. Specifying a scheme validation fun is recommended unless the URI is already sanitized.

OTP R15B01


SchemeDefaults = [{scheme(), default_scheme_port_number()}]
default_scheme_port_number() = inet:port_number()

Provides a list of the scheme and their default port numbers supported (by default) by this utility.