Get a URL

Get a URL

The CURLU * handle represents a single URL and you can easily extract that full URL or its individual parts with curl_url_get:
char *url;
rc = curl_url_get(h, CURLUPART_URL, &url, CURLU_NO_DEFAULT_PORT);
If the handle does not have enough information to return the part that is being asked for, it returns error.
A returned string must be freed with curl_free() after you are done with it.


When retrieving a URL part using curl_url_get(), the API offers a few different toggles to better specify exactly how that content should be returned. They are set in the flags bitmask parameter, which is the function's fourth argument. You can set zero, one or more bits.


If the URL handle has no port number stored, this option will make curl_url_get() return the default port for the used scheme.


If the handle has no scheme stored, this option will make curl_url_get() return the default scheme instead of error.


Instructs curl_url_get() to not use a port number in the generated URL if that port number matches the default port used for the scheme. For example, if port number 443 is set and the scheme is https, the extracted URL will not include the port number.


If set, will make curl_url_get() URL encode the host name part when a full URL is retrieved. If not set (default), libcurl returns the URL with the host name "raw" to support IDN names to appear as-is. IDN host names are typically using non-ASCII bytes that otherwise will be percent-encoded.
Note that even when not asking for URL encoding, the % (byte 37) will be URL encoded in host names to make sure the host name remains valid.


Tells curl_url_get() to URL decode the contents before returning it. It will not attempt to decode the scheme, the port number or the full URL. The query component will also get plus-to-space conversion as a bonus when this bit is set. Note that this URL decoding is charset unaware and you will get a zero terminated string back with data that could be intended for a particular encoding. If there are any byte values lower than 32 in the decoded string, the get operation will return an error instead.


If set and CURLU_URLENCODE is not set, and asked to retrieve the CURLUPART_HOST or CURLUPART_URL parts, libcurl returns the host name in its punycode version if it contains any non-ASCII octets (and is an IDN name). If libcurl is built without IDN capabilities, using this bit will make curl_url_get() return CURLUE_LACKS_IDN if the host name contains anything outside the ASCII range.