如何在不使用cURL二进制获取请求下载文件的情况下获取文件的长度

rtu*_*ado 7 c++ curl

我想在一些C++代码中创建一个cURL请求,它将获得服务器中文件的长度而无需下载文件.为此,我使用一些cURL选项告诉我只需要请求响应中的标头,然后我检查响应以获取文件长度.

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

curl_easy_setopt(_curl_handle, CURLOPT_HEADER, 1);
curl_easy_setopt(_curl_handle, CURLOPT_NOBODY, 1);
Run Code Online (Sandbox Code Playgroud)

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

curl_easy_getinfo(_curl_handle, CURLINFO_CONTENT_LENGTH_UPLOAD, &dResult);
Run Code Online (Sandbox Code Playgroud)

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

Rem*_*eau 7

CURLINFO_CONTENT_LENGTH_UPLOAD是上传的字节数.你需要CURLINFO_CONTENT_LENGTH_DOWNLOAD改用.

请注意,如果服务器动态生成数据,则在您实际下载文件而不是下载其标题时,长度可能会有所不同.

另请注意,如果服务器在下载时将数据发送为压缩数据,则标头中可能没有任何可用的大小(如果使用Transfer-Encoding标头而不是Content-Length标头),那么CURLINFO_CONTENT_LENGTH_DOWNLOAD仍然会返回-1.知道这种情况下的大小的唯一方法是完全下载它.