C++ libcurl 检查远程文件是否不同
C++ libcurl to check if remote file is different
我想知道是否可以在下载文件之前查询远程服务器上的文件以了解它是否与本地文件不同。
例如 HTTP 请求中的一个非常大的 xml 文件,如果我可以在不先下载它的情况下查看它是否发生了变化,我可以避免大量无用的下载。
编辑:这可以是修改日期、文件大小等
您可以 运行 一个 HEAD 请求来获取 header 信息。根据服务器的不同,这些甚至可能包含一个 Header 字段和文件的校验和(尽管不太可能)。
正如 Aleksandar 指出的那样,寻找 "Last-Modified" Header 字段是一个好的开始。
在此处查看有关如何使用 libcurl 仅获取 header 的信息:
C++ libcurl check header before downloading body
如果您只检查修改日期就足够了,libcurl 对此有直接支持 - 请参阅 CURLOPT_TIMEVALUE。还有一个示例代码:
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
/* January 1, 2020 is 1577833200 */
curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
/* If-Modified-Since the above time stamp */
curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
/* Perform the request */
curl_easy_perform(curl);
}
我想知道是否可以在下载文件之前查询远程服务器上的文件以了解它是否与本地文件不同。
例如 HTTP 请求中的一个非常大的 xml 文件,如果我可以在不先下载它的情况下查看它是否发生了变化,我可以避免大量无用的下载。
编辑:这可以是修改日期、文件大小等
您可以 运行 一个 HEAD 请求来获取 header 信息。根据服务器的不同,这些甚至可能包含一个 Header 字段和文件的校验和(尽管不太可能)。 正如 Aleksandar 指出的那样,寻找 "Last-Modified" Header 字段是一个好的开始。 在此处查看有关如何使用 libcurl 仅获取 header 的信息: C++ libcurl check header before downloading body
如果您只检查修改日期就足够了,libcurl 对此有直接支持 - 请参阅 CURLOPT_TIMEVALUE。还有一个示例代码:
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
/* January 1, 2020 is 1577833200 */
curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
/* If-Modified-Since the above time stamp */
curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
/* Perform the request */
curl_easy_perform(curl);
}