GNURLOPT_RESOLVE(3)
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 theHOST.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 theADDRESSentries 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
ADDRESSwithin[brackets]was added in7.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
- nixos 26.05: libgnurl 7.72.0
- nixpkgs unstable: libgnurl 7.72.0
- Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms