HTTP module

URL

An RFC 3986 based URL parser.

#include <icy/http/url.h>

class URL

Defined in src/http/include/icy/http/url.h:28

An RFC 3986 based URL parser. Constructors and assignment operators will throw a SyntaxException if the URL is invalid.

Friends

NameDescription
operator<< inline

operator<<

inline

friend inline std::ostream & operator<<(std::ostream & stream, const URL & url)

Defined in src/http/include/icy/http/url.h:163

Public Methods

ReturnNameDescription
URLCreates an empty URL.
URLParses the URL from a null-terminated string.
URLParses the URL from a std::string.
URLConstructs a URL from scheme and authority components.
URLConstructs a URL from scheme, authority, and path+query+fragment.
URLConstructs a URL from individual components.
URLDefaulted constructor.
~URL
URL &operator=Assigns a URL from another URL instance.
URL &operator=Assigns a URL from a null-terminated string.
URL &operator=Assigns a URL from a std::string.
boolparseParses and assigns a URL from the given string view, resetting all components first.
std::stringscheme constReturns the URL scheme (e.g. "http", "https", "ws"). Always lowercase.
std::stringuserInfo constReturns the user info component (e.g. "user:pass" from "http://user:pass@host/"). Returns an empty string if not present.
std::stringhost constReturns the host component (e.g. "example.com"). Returns an empty string if not present.
uint16_tport constReturns the port number. If no explicit port was in the URL, returns the default port for the scheme (80 for http, 443 for https), or 0 if the scheme is unknown.
std::stringauthority constReturns the authority component (userinfo@host:port). Only includes components that are present.
std::stringpath constReturns the path component (e.g. "/index.html"). Returns an empty string if not present.
std::stringpathEtc constReturns the path, query and fragment combined (e.g. "/path?q=1#frag").
std::stringquery constReturns the query string without the leading '?' (e.g. "key=value&foo=bar"). Returns an empty string if not present.
std::stringfragment constReturns the fragment identifier without the leading '#'. Returns an empty string if not present.
boolhasSchema constReturns true if the URL has a scheme component.
boolhasUserInfo constReturns true if the URL has a user info component.
boolhasHost constReturns true if the URL has a host component.
boolhasPort constReturns true if an explicit port was specified in the URL.
boolhasPath constReturns true if the URL has a path component.
boolhasQuery constReturns true if the URL has a query component.
boolhasFragment constReturns true if the URL has a fragment component.
boolvalid constReturns true if the URL is non-empty and was successfully parsed.
std::stringstr constReturns the original URL string as parsed.

URL

URL()

Defined in src/http/include/icy/http/url.h:32

Creates an empty URL.


URL

URL(const char * url)

Defined in src/http/include/icy/http/url.h:36

Parses the URL from a null-terminated string.

Parameters

ParameterTypeDescription
urlconst char *Null-terminated URL string to parse.

URL

URL(const std::string & url)

Defined in src/http/include/icy/http/url.h:40

Parses the URL from a std::string.

Parameters

ParameterTypeDescription
urlconst std::string &URL string to parse.

URL

URL(const std::string & scheme, const std::string & authority)

Defined in src/http/include/icy/http/url.h:45

Constructs a URL from scheme and authority components.

Parameters

ParameterTypeDescription
schemeconst std::string &URL scheme (e.g. "http", "https").
authorityconst std::string &Host and optional port (e.g. "example.com:8080").

URL

URL(const std::string & scheme, const std::string & authority, const std::string & pathEtc)

Defined in src/http/include/icy/http/url.h:51

Constructs a URL from scheme, authority, and path+query+fragment.

Parameters

ParameterTypeDescription
schemeconst std::string &URL scheme (e.g. "http").
authorityconst std::string &Host and optional port.
pathEtcconst std::string &Path, query and fragment combined (e.g. "/path?q=1#frag").

URL

URL(const std::string & scheme, const std::string & authority, const std::string & path, const std::string & query, const std::string & fragment = "")

Defined in src/http/include/icy/http/url.h:60

Constructs a URL from individual components.

Parameters

ParameterTypeDescription
schemeconst std::string &URL scheme (e.g. "http").
authorityconst std::string &Host and optional port.
pathconst std::string &URL path (e.g. "/index.html").
queryconst std::string &Query string without leading '?' (e.g. "key=value").
fragmentconst std::string &Fragment identifier without leading '#'.

URL

URL(const URL &) = default

Defined in src/http/include/icy/http/url.h:64

Defaulted constructor.


~URL

~URL()

Defined in src/http/include/icy/http/url.h:65


operator=

URL & operator=(const URL & uri)

Defined in src/http/include/icy/http/url.h:70

Assigns a URL from another URL instance.

Returns

Reference to this URL.

Parameters

ParameterTypeDescription
uriconst URL &Source URL to copy from.

operator=

URL & operator=(const char * uri)

Defined in src/http/include/icy/http/url.h:75

Assigns a URL from a null-terminated string.

Returns

Reference to this URL.

Parameters

ParameterTypeDescription
uriconst char *Null-terminated URL string to parse.

operator=

URL & operator=(const std::string & uri)

Defined in src/http/include/icy/http/url.h:80

Assigns a URL from a std::string.

Returns

Reference to this URL.

Parameters

ParameterTypeDescription
uriconst std::string &URL string to parse.

parse

bool parse(std::string_view url, bool whiny = true)

Defined in src/http/include/icy/http/url.h:86

Parses and assigns a URL from the given string view, resetting all components first.

Returns

true if the URL was parsed successfully; false if invalid and whiny is false.

Parameters

ParameterTypeDescription
urlstd::string_viewURL string to parse.
whinyboolIf true, throws std::runtime_error on an invalid URL; otherwise returns false.

scheme

const

std::string scheme() const

Defined in src/http/include/icy/http/url.h:102

Returns the URL scheme (e.g. "http", "https", "ws"). Always lowercase.


userInfo

const

std::string userInfo() const

Defined in src/http/include/icy/http/url.h:106

Returns the user info component (e.g. "user:pass" from "http://user:pass@host/"). Returns an empty string if not present.


host

const

std::string host() const

Defined in src/http/include/icy/http/url.h:110

Returns the host component (e.g. "example.com"). Returns an empty string if not present.


port

const

uint16_t port() const

Defined in src/http/include/icy/http/url.h:115

Returns the port number. If no explicit port was in the URL, returns the default port for the scheme (80 for http, 443 for https), or 0 if the scheme is unknown.


authority

const

std::string authority() const

Defined in src/http/include/icy/http/url.h:119

Returns the authority component (userinfo@host:port). Only includes components that are present.


path

const

std::string path() const

Defined in src/http/include/icy/http/url.h:123

Returns the path component (e.g. "/index.html"). Returns an empty string if not present.


pathEtc

const

std::string pathEtc() const

Defined in src/http/include/icy/http/url.h:126

Returns the path, query and fragment combined (e.g. "/path?q=1#frag").


query

const

std::string query() const

Defined in src/http/include/icy/http/url.h:130

Returns the query string without the leading '?' (e.g. "key=value&foo=bar"). Returns an empty string if not present.


fragment

const

std::string fragment() const

Defined in src/http/include/icy/http/url.h:134

Returns the fragment identifier without the leading '#'. Returns an empty string if not present.


hasSchema

const

bool hasSchema() const

Defined in src/http/include/icy/http/url.h:137

Returns true if the URL has a scheme component.


hasUserInfo

const

bool hasUserInfo() const

Defined in src/http/include/icy/http/url.h:140

Returns true if the URL has a user info component.


hasHost

const

bool hasHost() const

Defined in src/http/include/icy/http/url.h:143

Returns true if the URL has a host component.


hasPort

const

bool hasPort() const

Defined in src/http/include/icy/http/url.h:146

Returns true if an explicit port was specified in the URL.


hasPath

const

bool hasPath() const

Defined in src/http/include/icy/http/url.h:149

Returns true if the URL has a path component.


hasQuery

const

bool hasQuery() const

Defined in src/http/include/icy/http/url.h:152

Returns true if the URL has a query component.


hasFragment

const

bool hasFragment() const

Defined in src/http/include/icy/http/url.h:155

Returns true if the URL has a fragment component.


valid

const

bool valid() const

Defined in src/http/include/icy/http/url.h:158

Returns true if the URL is non-empty and was successfully parsed.


str

const

std::string str() const

Defined in src/http/include/icy/http/url.h:161

Returns the original URL string as parsed.

Public Static Methods

ReturnNameDescription
std::stringencode staticPercent-encodes a string per RFC 3986, preserving unreserved characters (A-Z, a-z, 0-9, '-', '_', '.', '~'). Equivalent to JavaScript's encodeURIComponent().
std::stringdecode staticDecodes a percent-encoded string per RFC 3986. Equivalent to JavaScript's decodeURIComponent().

encode

static

static std::string encode(std::string_view str)

Defined in src/http/include/icy/http/url.h:92

Percent-encodes a string per RFC 3986, preserving unreserved characters (A-Z, a-z, 0-9, '-', '_', '.', '~'). Equivalent to JavaScript's encodeURIComponent().

Returns

Percent-encoded string.

Parameters

ParameterTypeDescription
strstd::string_viewInput string to encode.

decode

static

static std::string decode(std::string_view str)

Defined in src/http/include/icy/http/url.h:98

Decodes a percent-encoded string per RFC 3986. Equivalent to JavaScript's decodeURIComponent().

Returns

Decoded string.

Parameters

ParameterTypeDescription
strstd::string_viewPercent-encoded input string.

Protected Attributes

ReturnNameDescription
std::string_buf
std::string_scheme
std::string_userInfo
std::string_host
uint16_t_port
std::string_path
std::string_query
std::string_fragment
bool_hasPort

_buf

std::string _buf

Defined in src/http/include/icy/http/url.h:170


_scheme

std::string _scheme

Defined in src/http/include/icy/http/url.h:171


_userInfo

std::string _userInfo

Defined in src/http/include/icy/http/url.h:172


_host

std::string _host

Defined in src/http/include/icy/http/url.h:173


_port

uint16_t _port

Defined in src/http/include/icy/http/url.h:174


_path

std::string _path

Defined in src/http/include/icy/http/url.h:175


_query

std::string _query

Defined in src/http/include/icy/http/url.h:176


_fragment

std::string _fragment

Defined in src/http/include/icy/http/url.h:177


_hasPort

bool _hasPort

Defined in src/http/include/icy/http/url.h:178