我正在通过libcurl抓取一个页面。我需要使用特定的IP来获取页面。此ip已由DNS解析器生成。所以我可以跳过libcurl中的getaddrinfo
并花费更少的时间。
我问了一个问题How can I use libcurl function "curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address);",但我发现这不是我想要的。
答案 0 :(得分:1)
您可以使用CURLOPT_RESOLVE“预填充”libcurl的DNS缓存,然后您可以像往常一样继续在URL中使用主机名。
这里有一个小样本告诉curl example.com是在127.0.0.1
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");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
curl_slist_free_all(host);
另一个选择是在URL中使用正确的IP并发送包含正确主机名的自定义Host:标头。
(CURLOPT_DNS_LOCAL_IP4设置“解析器应绑定到的本地IPv4地址”,因此是完全不同的功能)