123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- .\" **************************************************************************
- .\" * _ _ ____ _
- .\" * Project ___| | | | _ \| |
- .\" * / __| | | | |_) | |
- .\" * | (__| |_| | _ <| |___
- .\" * \___|\___/|_| \_\_____|
- .\" *
- .\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
- .\" *
- .\" * This software is licensed as described in the file COPYING, which
- .\" * you should have received as part of this distribution. The terms
- .\" * are also available at https://curl.se/docs/copyright.html.
- .\" *
- .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- .\" * copies of the Software, and permit persons to whom the Software is
- .\" * furnished to do so, under the terms of the COPYING file.
- .\" *
- .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- .\" * KIND, either express or implied.
- .\" *
- .\" * SPDX-License-Identifier: curl
- .\" *
- .\" **************************************************************************
- .TH curl_url_get 3 "6 Aug 2018" "libcurl" "libcurl"
- .SH NAME
- curl_url_get - extract a part from a URL
- .SH SYNOPSIS
- .nf
- #include <curl/curl.h>
- CURLUcode curl_url_get(CURLU *url,
- CURLUPart what,
- char **part,
- unsigned int flags)
- .fi
- .SH DESCRIPTION
- Given the \fIurl\fP handle of an already parsed URL, this function lets the
- user extract individual pieces from it.
- The \fIwhat\fP argument should be the particular part to extract (see list
- below) and \fIpart\fP points to a 'char *' to get updated to point to a newly
- allocated string with the contents.
- The URL API has no particular maximum length for URL fiends. In the real
- world, excessively long field in URLs will cause problems even if this API
- accepts them. This function can return very large ones.
- The \fIflags\fP argument is a bitmask with individual features.
- The returned part pointer must be freed with \fIcurl_free(3)\fP after use.
- .SH FLAGS
- The flags argument is zero, one or more bits set in a bitmask.
- .IP CURLU_DEFAULT_PORT
- If the handle has no port stored, this option will make \fIcurl_url_get(3)\fP
- return the default port for the used scheme.
- .IP CURLU_DEFAULT_SCHEME
- If the handle has no scheme stored, this option will make
- \fIcurl_url_get(3)\fP return the default scheme instead of error.
- .IP CURLU_NO_DEFAULT_PORT
- Instructs \fIcurl_url_get(3)\fP to not return a port number if it matches the
- default port for the scheme.
- .IP CURLU_URLDECODE
- Asks \fIcurl_url_get(3)\fP 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's any byte values lower than 32 in the decoded string, the get
- operation will return an error instead.
- .IP CURLU_URLENCODE
- If set, will make \fIcurl_url_get(3)\fP 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 to make sure the host name remains valid.
- .IP CURLU_PUNYCODE
- If set and \fICURLU_URLENCODE\fP is not set, and asked to retrieve the
- \fBCURLUPART_HOST\fP or \fBCURLUPART_URL\fP 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
- \fIcurl_url_get(3)\fP return \fICURLUE_LACKS_IDN\fP if the host name contains
- anything outside the ASCII range.
- (Added in curl 7.88.0)
- .SH PARTS
- .IP CURLUPART_URL
- When asked to return the full URL, \fIcurl_url_get(3)\fP will return a
- normalized and possibly cleaned up version of what was previously parsed.
- We advise using the \fICURLU_PUNYCODE\fP option to get the URL as "normalized"
- as possible since IDN allows host names to be written in many different ways
- that still end up the same punycode version.
- .IP CURLUPART_SCHEME
- Scheme cannot be URL decoded on get.
- .IP CURLUPART_USER
- .IP CURLUPART_PASSWORD
- .IP CURLUPART_OPTIONS
- The options field is an optional field that might follow the password in the
- userinfo part. It is only recognized/used when parsing URLs for the following
- schemes: pop3, smtp and imap. The URL API still allows users to set and get
- this field independently of scheme when not parsing full URLs.
- .IP CURLUPART_HOST
- The host name. If it is an IPv6 numeric address, the zone id will not be part
- of it but is provided separately in \fICURLUPART_ZONEID\fP. IPv6 numerical
- addresses are returned within brackets ([]).
- IPv6 names are normalized when set, which should make them as short as
- possible while maintaining correct syntax.
- .IP CURLUPART_ZONEID
- If the host name is a numeric IPv6 address, this field might also be set.
- .IP CURLUPART_PORT
- A port cannot be URL decoded on get. This number is returned in a string just
- like all other parts. That string is guaranteed to hold a valid port number in
- ASCII using base 10.
- .IP CURLUPART_PATH
- The \fIpart\fP will be '/' even if no path is supplied in the URL. A URL path
- always starts with a slash.
- .IP CURLUPART_QUERY
- The initial question mark that denotes the beginning of the query part is a
- delimiter only. It is not part of the query contents.
- A not-present query will lead \fIpart\fP to be set to NULL.
- A zero-length query will lead \fIpart\fP to be set to a zero-length string.
- The query part will also get pluses converted to space when asked to URL
- decode on get with the CURLU_URLDECODE bit.
- .IP CURLUPART_FRAGMENT
- The initial hash sign that denotes the beginning of the fragment is a
- delimiter only. It is not part of the fragment contents.
- .SH EXAMPLE
- .nf
- CURLUcode rc;
- CURLU *url = curl_url();
- rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0);
- if(!rc) {
- char *scheme;
- rc = curl_url_get(url, CURLUPART_SCHEME, &scheme, 0);
- if(!rc) {
- printf("the scheme is %s\\n", scheme);
- curl_free(scheme);
- }
- curl_url_cleanup(url);
- }
- .fi
- .SH AVAILABILITY
- Added in 7.62.0. CURLUPART_ZONEID was added in 7.65.0.
- .SH RETURN VALUE
- Returns a CURLUcode error value, which is CURLUE_OK (0) if everything went
- fine. See the \fIlibcurl-errors(3)\fP man page for the full list with
- descriptions.
- If this function returns an error, no URL part is returned.
- .SH "SEE ALSO"
- .BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_set "(3), "
- .BR curl_url_dup "(3), " curl_url_strerror "(3), " CURLOPT_CURLU "(3)"
|