如何使用libcurl获取具有特定服务器IP的页面

时间:2015-04-22 07:50:15

标签: c curl web-crawler libcurl

我正在通过libcurl抓取一个页面。我需要使用特定的IP来获取页面。此ip已由DNS解析器生成。所以我可以跳过libcurl中的getaddrinfo并花费更少的时间。

我问了一个问题How can I use libcurl function "curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address);",但我发现这不是我想要的。

1 个答案:

答案 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地址”,因此是完全不同的功能)