Parses an absolute URI.
You can also pass %NULL for uri_string
if you want to get back an
"empty" #SoupURI that you can fill in by hand. (You will need to
call at least soup_uri_set_scheme() and soup_uri_set_path(), since
those fields are required.)
a URI
a fragment identifier within path,
or %NULL
the hostname or IP address, or %NULL
a password, or %NULL
the path on host
the port number on host
a query for path,
or %NULL
the URI scheme (eg, "http")
a username, or %NULL
Frees uri
.
Gets uri'
s fragment.
Gets uri'
s host.
Gets uri'
s password.
Gets uri'
s path.
Gets uri'
s port.
Gets uri'
s query.
Gets uri'
s scheme.
Gets uri'
s user.
Hashes key,
considering only the scheme, host, and port.
Sets uri'
s fragment to fragment
.
the fragment
Sets uri'
s host to host
.
If host
is an IPv6 IP address, it should not include the brackets
required by the URI syntax; they will be added automatically when
converting uri
to a string.
http and https URIs should not have a %NULL host
.
the hostname or IP address, or %NULL
Sets uri'
s password to password
.
the password, or %NULL
Sets uri'
s path to path
.
the non-%NULL path
Sets uri'
s port to port
. If port
is 0, uri
will not have an
explicitly-specified port.
the port, or 0
Sets uri'
s query to query
.
the query
Sets uri'
s query to the result of encoding form
according to the
HTML form rules. See soup_form_encode_hash() for more information.
a #GHashTable containing HTML form information
Sets uri'
s scheme to scheme
. This will also set uri'
s port to
the default port for scheme,
if known.
the URI scheme
Sets uri'
s user to user
.
the username, or %NULL
Returns a string representing uri
.
If just_path_and_query
is %TRUE, this concatenates the path and query
together. That is, it constructs the string that would be needed in
the Request-Line of an HTTP request for uri
.
Note that the output will never contain a password, even if uri
does.
if %TRUE, output just the path and query portions
Tests if uri
uses the default port for its scheme. (Eg, 80 for
http.) (This only works for http, https and ftp; libsoup does not know
the default ports of other protocols.)
Fully %-decodes part
.
In the past, this would return %NULL if part
contained invalid
percent-encoding, but now it just ignores the problem (as
soup_uri_new() already did).
a URI part
This %-encodes the given URI part and returns the escaped version in allocated memory, which the caller must free when it is done.
a URI part
additional reserved characters to escape (or %NULL)
Parses an absolute URI.
You can also pass %NULL for uri_string
if you want to get back an
"empty" #SoupURI that you can fill in by hand. (You will need to
call at least soup_uri_set_scheme() and soup_uri_set_path(), since
those fields are required.)
a URI
%-decodes any "unreserved" characters (or characters in
unescape_extra)
in part,
and %-encodes any non-ASCII
characters, spaces, and non-printing characters in part
.
"Unreserved" characters are those that are not allowed to be used
for punctuation according to the URI spec. For example, letters are
unreserved, so soup_uri_normalize() will turn
In the past, this would return %NULL if part
contained invalid
percent-encoding, but now it just ignores the problem (as
soup_uri_new() already did).
a URI part
reserved characters to unescape (or %NULL)
A #SoupURI represents a (parsed) URI. #SoupURI supports RFC 3986 (URI Generic Syntax), and can parse any valid URI. However, libsoup only uses "http" and "https" URIs internally; You can use SOUP_URI_VALID_FOR_HTTP() to test if a #SoupURI is a valid HTTP URI.
scheme
will always be set in any URI. It is an interned string and is always all lowercase. (If you parse a URI with a non-lowercase scheme, it will be converted to lowercase.) The macros %SOUP_URI_SCHEME_HTTP and %SOUP_URI_SCHEME_HTTPS provide the interned values for "http" and "https" and can be compared against URIscheme
values.user
andpassword
are parsed as defined in the older URI specs (ie, separated by a colon; RFC 3986 only talks about a single "userinfo" field). Note thatpassword
is not included in the output of soup_uri_to_string(). libsoup does not normally use these fields; authentication is handled via #SoupSession signals.host
contains the hostname, andport
the port specified in the URI. If the URI doesn't contain a hostname,host
will be %NULL, and if it doesn't specify a port,port
may be 0. However, for "http" and "https" URIs,host
is guaranteed to be non-%NULL (trying to parse an http URI with nohost
will return %NULL), andport
will always be non-0 (because libsoup knows the default value to use when it is not specified in the URI).path
is always non-%NULL. For http/https URIs,path
will never be an empty string either; if the input URI has no path, the parsed #SoupURI will have apath
of "/".query
andfragment
are optional for all URI types. soup_form_decode() may be useful for parsingquery
.Note that
path,
query,
andfragment
may contain %-encoded characters. soup_uri_new() calls soup_uri_normalize() on them, but not soup_uri_decode(). This is necessary to ensure that soup_uri_to_string() will generate a URI that has exactly the same meaning as the original. (In theory, #SoupURI should leaveuser,
password,
andhost
partially-encoded as well, but this would be more annoying than useful.)