CURLOPT_DEFAULT_PROTOCOL(3)

CURLOPT_DEFAULT_PROTOCOL3

Default protocol to use if the url is missing a scheme name

Usage

#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEFAULT_PROTOCOL,
                          char *protocol);

Overview

This option tells libcurl to use protocol if the URL set with CURLOPT_URL(3) misses a scheme name.

Use one of these protocol (scheme) names:

dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp

An unknown or unsupported protocol causes error CURLE_UNSUPPORTED_PROTOCOL when libcurl parses a URL without a scheme. Parsing happens when curl_easy_perform(3) or curl_multi_perform(3) is called. The protocol set supported by libcurl vary depending on how it was built. Use curl_version_info(3) if you need a list of protocol names supported by the build of libcurl that you are using.

This option does not change the default proxy protocol (http).

Without this option libcurl would make a guess based on the host, see CURLOPT_URL(3) for details.

The application does not have to keep the string around after setting this option.

Using this option multiple times makes the last set string override the previous ones. Set it to NULL to disable its use again.

This option does not adjust the scheme for URLs set with CURLOPT_CURLU(3).

Default

NULL (make a guess based on the host)

Protocols

This functionality affects all supported protocols

Examples

int main(void)
{
  CURL *curl = curl_easy_init();
  if(curl) {
    CURLcode result;
    /* set a URL without a scheme */
    curl_easy_setopt(curl, CURLOPT_URL, "example.com");
    /* set the default protocol (scheme) for schemeless URLs */
    curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
    /* Perform the request */
    result = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
  }
}

Return value

CURLE_OK if the option is supported.

CURLE_OUT_OF_MEMORY if there was insufficient heap space.

CURLE_UNKNOWN_OPTION if the option is not supported.

Releases

6 releases since Debian 9 (Stretch); the text changed 5 times.

  1. 9
  2. 10
  3. 11
  4. 12
  5. 13
  6. Arch

Availability

Added in curl 7.45.0

From curl 8.23.0-1 in Arch Linux 2026-11-01. Parsed by carta from the page's man source.