c++ - 如何在不下载 cURL 二进制获取请求中的文件的情况下获取文件的长度

标签 c++ curl

我想在一些 C++ 代码中创建一个 cURL 请求,这将在不下载文件的情况下获取服务器中文件的长度。为此,我使用一些 cURL 选项来告诉我只需要请求响应中的 header ,然后检查响应以获取文件长度。

我正在设置以下请求选项:

curl_easy_setopt(_curl_handle, CURLOPT_HEADER, 1);
curl_easy_setopt(_curl_handle, CURLOPT_NOBODY, 1);

然后处理请求,等待响应,显示OK=200,最后查询文件长度:

curl_easy_getinfo(_curl_handle, CURLINFO_CONTENT_LENGTH_UPLOAD, &dResult);

但我得到的文件长度为 -1。根据 cURL 文档,这意味着大小未知。怎么会出现cURL没有从服务器获取文件长度信息呢?

最佳答案

CURLINFO_CONTENT_LENGTH_UPLOAD 是上传的字节数。您需要改用 CURLINFO_CONTENT_LENGTH_DOWNLOAD

请注意,如果服务器动态生成数据,则实际下载文件时的长度可能与仅下载文件头时的长度不同。

另请注意,如果服务器在下载时发送压缩数据,则 header 中可能没有任何可用大小(如果使用 Transfer-Encoding header 而不是 Content- Length header ),因此 CURLINFO_CONTENT_LENGTH_DOWNLOAD 仍会返回 -1。了解这种情况下大小的唯一方法是完整下载。

关于c++ - 如何在不下载 cURL 二进制获取请求中的文件的情况下获取文件的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343969/

相关文章:

linux - 无法使用curl从Linux服务器上的firebase存储下载文件会出现段错误

c++ - CUDA 运行时错误 4 - 从 CUDA 3.2 更新到 CUDA4 后出现

c++ - 在 TBB 中实现 MapReduce

c++ - 系列的第n项

php - 使用 php cUrl 发送 session 变量

node.js - node-libcurl 在 POST 上获取错误的 IP 地址

c++ - 使用在派生类中声明的方法

c++ - 在程序中添加区号

ruby - ruby 中的 SSL 问题但不是 curl

php - 如何使用 cURL 部分下载远程文件?