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

如何使用libcurl获取具有特定服务器IP的页面,c,curl,web-crawler,libcurl,C,Curl,Web Crawler,Libcurl,我正在libcurl的网页上爬行。我需要使用特定的IP来获取页面。此ip已由DNS解析程序生成。因此,我可以跳过libcurl中的getaddrinfo,节省时间 我问了一个问题,但我发现这不是我想要的。您可以使用“预填充”libcurl的DNS缓存,然后您可以像正常情况一样继续在URL中使用主机名 下面是一个小示例,告诉您curl example.com的版本是127.0.0.1 CURL *curl; struct curl_slist *host = NULL; host = curl_s

我正在libcurl的网页上爬行。我需要使用特定的IP来获取页面。此ip已由DNS解析程序生成。因此,我可以跳过libcurl中的
getaddrinfo
,节省时间

我问了一个问题,但我发现这不是我想要的。

您可以使用“预填充”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,并发送包含正确主机名的自定义主机:头


(设置“解析程序应绑定到的本地IPv4地址”,因此这是一个完全不同的功能)

因此您想访问,比如说
http://some.tld/file.ext
您已经知道您想使用特定的IP访问
一些.tld
,比如
123.456.789.1
?我理解正确了吗?那你为什么不直接访问
http://123.456.789.1/file.ext
?这并不总是正确的。例如,网站服务器IP为93.184.216.34,但我无法通过获取页面。您可能需要在请求中添加一个
Host:example.com
头。添加一个Host:HTTP头应该可以完成这项工作,除非服务器使用一些SNI设置,然后CURLOPT_RESOLVE是唯一的解决方案。我已经更新了问题。你能帮帮我吗?谢谢,港口是443