URL
URL
#include <icy/http/url.h>An RFC 3986 based URL parser. Constructors and assignment operators will throw a SyntaxException if the URL is invalid.
Public Methods
| Return | Name | Description |
|---|---|---|
URL | Creates an empty URL. | |
URL | Parses the URL from a null-terminated string. | |
URL | Parses the URL from a std::string. | |
URL | Constructs a URL from scheme and authority components. | |
URL | Constructs a URL from scheme, authority, and path+query+fragment. | |
URL | Constructs a URL from individual components. | |
URL | Defaulted constructor. | |
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. |
bool | parse | Parses and assigns a URL from the given string view, resetting all components first. |
std::string | scheme const | Returns the URL scheme (e.g. "http", "https", "ws"). Always lowercase. |
std::string | userInfo const | Returns the user info component (e.g. "user:pass" from "http://user:pass@host/"). Returns an empty string if not present. |
std::string | host const | Returns the host component (e.g. "example.com"). Returns an empty string if not present. |
uint16_t | port const | 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. |
std::string | authority const | Returns the authority component (userinfo@host:port). Only includes components that are present. |
std::string | path const | Returns the path component (e.g. "/index.html"). Returns an empty string if not present. |
std::string | pathEtc const | Returns the path, query and fragment combined (e.g. "/path?q=1#frag"). |
std::string | query const | Returns the query string without the leading '?' (e.g. "key=value&foo=bar"). Returns an empty string if not present. |
std::string | fragment const | Returns the fragment identifier without the leading '#'. Returns an empty string if not present. |
bool | hasSchema const | Returns true if the URL has a scheme component. |
bool | hasUserInfo const | Returns true if the URL has a user info component. |
bool | hasHost const | Returns true if the URL has a host component. |
bool | hasPort const | Returns true if an explicit port was specified in the URL. |
bool | hasPath const | Returns true if the URL has a path component. |
bool | hasQuery const | Returns true if the URL has a query component. |
bool | hasFragment const | Returns true if the URL has a fragment component. |
bool | valid const | Returns true if the URL is non-empty and was successfully parsed. |
std::string | str const | Returns the original URL string as parsed. |
URL
URL()Creates an empty URL.
URL
URL(const char * url)Parses the URL from a null-terminated string.
Parameters
urlNull-terminated URL string to parse.
URL
URL(const std::string & url)Parses the URL from a std::string.
Parameters
urlURL string to parse.
URL
URL(const std::string & scheme, const std::string & authority)Constructs a URL from scheme and authority components.
Parameters
schemeURL scheme (e.g. "http", "https").authorityHost and optional port (e.g. "example.com:8080").
URL
URL(const std::string & scheme, const std::string & authority, const std::string & pathEtc)Constructs a URL from scheme, authority, and path+query+fragment.
Parameters
schemeURL scheme (e.g. "http").authorityHost and optional port.pathEtcPath, 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)Constructs a URL from individual components.
Parameters
schemeURL scheme (e.g. "http").authorityHost and optional port.pathURL path (e.g. "/index.html").queryQuery string without leading '?' (e.g. "key=value").fragmentFragment identifier without leading '#'.
URL
URL(const URL &) = defaultDefaulted constructor.
operator=
URL & operator=(const URL & uri)Assigns a URL from another URL instance.
Parameters
uriSource URL to copy from.
Returns
Reference to this URL.
operator=
URL & operator=(const char * uri)Assigns a URL from a null-terminated string.
Parameters
uriNull-terminated URL string to parse.
Returns
Reference to this URL.
operator=
URL & operator=(const std::string & uri)Assigns a URL from a std::string.
Parameters
uriURL string to parse.
Returns
Reference to this URL.
parse
bool parse(std::string_view url, bool whiny)Parses and assigns a URL from the given string view, resetting all components first.
Parameters
urlURL string to parse.whinyIf true, throws std::runtime_error on an invalid URL; otherwise returns false.
Returns
true if the URL was parsed successfully; false if invalid and whiny is false.
scheme
const
std::string scheme() constReturns the URL scheme (e.g. "http", "https", "ws"). Always lowercase.
userInfo
const
std::string userInfo() constReturns 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() constReturns the host component (e.g. "example.com"). Returns an empty string if not present.
port
const
uint16_t port() 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.
authority
const
std::string authority() constReturns the authority component (userinfo@host:port). Only includes components that are present.
path
const
std::string path() constReturns the path component (e.g. "/index.html"). Returns an empty string if not present.
pathEtc
const
std::string pathEtc() constReturns the path, query and fragment combined (e.g. "/path?q=1#frag").
query
const
std::string query() constReturns the query string without the leading '?' (e.g. "key=value&foo=bar"). Returns an empty string if not present.
fragment
const
std::string fragment() constReturns the fragment identifier without the leading '#'. Returns an empty string if not present.
hasSchema
const
bool hasSchema() constReturns true if the URL has a scheme component.
hasUserInfo
const
bool hasUserInfo() constReturns true if the URL has a user info component.
hasHost
const
bool hasHost() constReturns true if the URL has a host component.
hasPort
const
bool hasPort() constReturns true if an explicit port was specified in the URL.
hasPath
const
bool hasPath() constReturns true if the URL has a path component.
hasQuery
const
bool hasQuery() constReturns true if the URL has a query component.
hasFragment
const
bool hasFragment() constReturns true if the URL has a fragment component.
valid
const
bool valid() constReturns true if the URL is non-empty and was successfully parsed.
str
const
std::string str() constReturns the original URL string as parsed.
Public Static Methods
| Return | Name | Description |
|---|---|---|
std::string | encode static | Percent-encodes a string per RFC 3986, preserving unreserved characters (A-Z, a-z, 0-9, '-', '_', '.', '~'). Equivalent to JavaScript's encodeURIComponent(). |
std::string | decode static | Decodes a percent-encoded string per RFC 3986. Equivalent to JavaScript's decodeURIComponent(). |
encode
static
static std::string encode(std::string_view str)Percent-encodes a string per RFC 3986, preserving unreserved characters (A-Z, a-z, 0-9, '-', '_', '.', '~'). Equivalent to JavaScript's encodeURIComponent().
Parameters
strInput string to encode.
Returns
Percent-encoded string.
decode
static
static std::string decode(std::string_view str)Decodes a percent-encoded string per RFC 3986. Equivalent to JavaScript's decodeURIComponent().
Parameters
strPercent-encoded input string.
Returns
Decoded string.
Protected Attributes
| Return | Name | Description |
|---|---|---|
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_scheme
std::string _scheme_userInfo
std::string _userInfo_host
std::string _host_port
uint16_t _port_path
std::string _path_query
std::string _query_fragment
std::string _fragment_hasPort
bool _hasPort