GNURLOPT_RESOLVE(3)

πŸ“¦ version 7.72.0, in nixos 26.05, nixpkgs unstable

GNURLOPT_RESOLVE(3) 🌸 β€” custom host name to IP address resolves, but make it fashion

hiii bestie, you're reading the GNURLOPT_RESOLVE(3) page β€” yes, that's the manual name β€” and we're in the curl_easy_setopt options corner. This one is about handing libcurl your own custom host name to IP address resolves. No cap, it's giving DNS but make it personal. πŸ’…

🌟 NAME 🌟

CURLOPT_RESOLVE β€” provide custom host name to IP address resolves. That's the whole vibe.

✨ SYNOPSIS ✨

#include <gnurl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVE,
                          struct curl_slist *hosts);

πŸ’– DESCRIPTION πŸ’–

okay so, the tea: you pass a pointer to a linked list of strings with host name resolve information to use for requests with this handle. The linked list should be a fully valid list of struct curl_slist structs, properly filled in. Use curl_slist_append(3) to create the list and curl_slist_free_all(3) to clean up an entire list. That's the housekeeping, bestie.

Each single name resolve string should be written using the format HOST:PORT:ADDRESS[,ADDRESS].... Let's break that down:

  • HOST β€” the name libcurl will try to resolve.
  • PORT β€” the port number of the service where libcurl wants to connect to the HOST.
  • ADDRESS β€” one or more numerical IP addresses. If you specify multiple IP addresses, they need to be separated by a comma. If libcurl is built to support IPv6, each of the ADDRESS entries can of course be either IPv4 or IPv6 style addressing.

This option effectively pre-populates the DNS cache with entries for the host+port pair, so redirects and everything that operates against the HOST+PORT will instead use your provided ADDRESS. Addresses set with CURLOPT_RESOLVE(3) will not time-out from the DNS cache like ordinary entries. Iconic, honestly.

If the DNS cache already has an entry for the given host+port pair, then that entry will be removed and a new entry will be created. This is because the old entry may have different addresses or be ordinary entries with time-outs. So yeah, out with the old, in with your custom resolve. πŸ’–

The provided ADDRESS set by this option will be used even if CURLOPT_IPRESOLVE(3) is set to make libcurl use another IP version. Periodt.

Wanna remove names from the DNS cache again, to stop providing these fake resolves? Include a string in the linked list that uses the format -HOST:PORT. The host name must be prefixed with a dash, and the host name and port number must exactly match what was already added previously. iykyk.

  • Support for providing the ADDRESS within [brackets] was added in 7.57.0.
  • Support for providing multiple IP addresses per entry was added in 7.59.0.

πŸŽ€ DEFAULT πŸŽ€

NULL. We love a clean default.

πŸ¦‹ PROTOCOLS πŸ¦‹

All. Every single one, bestie.

🌈 EXAMPLE 🌈

CURL *curl;
struct curl_slist *host = NULL;
host = curl_slist_append(NULL, "example.com:80:127.0.0.1");

curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_RESOLVE, host);
  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");

  curl_easy_perform(curl);

  /* always cleanup */
  curl_easy_cleanup(curl);
}

curl_slist_free_all(host);

πŸ’… AVAILABILITY πŸ’…

Added in 7.21.3. Removal support added in 7.42.0.

🫢 RETURN VALUE 🫢

Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. No cap.

πŸ‘‘ SEE ALSO πŸ‘‘


this page is from libcurl 7.37.0, dated 19 Jun 2014, and the manual name is GNURLOPT_RESOLVE(3) β€” bye bestie, go pre-populate that DNS cache responsibly 🫢✨

πŸ“¦ where this page comes from