20122015 Ericsson AB. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. http_uri
http_uri URI utility module

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

DATA TYPES

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

boolean() = true | false

string() = list of ASCII characters

URI DATA TYPES

Type definitions that are related to URI:

uri() = string()

Syntax according to the URI definition in RFC 3986, for example, "http://www.erlang.org/"

user_info() = string()

scheme() = atom()

Example: http, https

host() = string()

port() = pos_integer()

path() = string()

Represents a file path or directory path

query() = string()

fragment() = string()

For more information about URI, see RFC 3986.

decode(HexEncodedURI) -> URI Decodes a hexadecimal encoded URI. HexEncodedURI = string() - A possibly hexadecimal encoded URI URI = uri()

Decodes a possibly hexadecimal encoded URI.

encode(URI) -> HexEncodedURI Encodes a hexadecimal encoded URI. URI = uri() HexEncodedURI = string() - Hexadecimal encoded URI

Encodes a hexadecimal encoded URI.

parse(URI) -> {ok, Result} | {error, Reason} parse(URI, Options) -> {ok, Result} | {error, Reason} Parses a URI. 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} UserInfo = user_info() Host = host() Port = pos_integer() 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()) -> valid | {error, Reason :: term()}.

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

scheme_defaults() -> SchemeDefaults A list of the scheme and their default ports. SchemeDefaults = [{scheme(), default_scheme_port_number()}] default_scheme_port_number() = pos_integer()

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