curl\_url(3) Library Functions Manual curl\_url(3)

# [NAME](#NAME)

curl\_url - create a URL handle

# [SYNOPSIS](#SYNOPSIS)

```
#include <curl/curl.h>
CURLU *curl_url();
```

# [DESCRIPTION](#DESCRIPTION)

This function allocates a URL object and returns a *CURLU* handle for it, to be used as input to all other URL API functions.

This is a handle to a URL object that holds or can hold URL components for a single URL. When the object is first created, there is of course no components stored. They are then set in the object with the [*curl\_url\_set(3)*](/man/os/curl/curl_url_set.3) function.

The object must be destroyed with a call to [*curl\_url\_cleanup(3)*](/man/os/curl/curl_url_cleanup.3) when no longer needed.

# [PROTOCOLS](#PROTOCOLS)

This functionality affects all supported protocols

# [EXAMPLE](#EXAMPLE)

```
int main(void)
{


  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);


  }
}
```

# [AVAILABILITY](#AVAILABILITY)

Added in curl 7.62.0

# [RETURN VALUE](#RETURN_VALUE)

Returns a **CURLU** * if successful, or NULL if out of memory.

# [SEE ALSO](#SEE_ALSO)

[**CURLOPT\_CURLU**(3)](/man/os/curl/CURLOPT_CURLU.3), [**curl\_url\_cleanup**(3)](/man/os/curl/curl_url_cleanup.3), [**curl\_url\_dup**(3)](/man/os/curl/curl_url_dup.3), [**curl\_url\_get**(3)](/man/os/curl/curl_url_get.3), [**curl\_url\_set**(3)](/man/os/curl/curl_url_set.3), [**curl\_url\_strerror**(3)](/man/os/curl/curl_url_strerror.3)

2026-09-24 libcurl

---

Document: curl_url(3) from curl 8.22.0-r3 (Chainguard OS)
Source: https://github.com/curl/curl.git
