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

时间:2011-10-06 16:13:26

标签: c++ curl

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

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

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没有从服务器获取文件长度信息?

3 个答案:

答案 0 :(得分:7)

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

请注意,如果服务器动态生成数据,那么当您实际下载文件而不是下载文件时,长度可能会有所不同。

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

答案 1 :(得分:3)

您是否尝试使用CURLINFO_CONTENT_LENGTH_DOWNLOAD?

答案 2 :(得分:0)

需要致电perform()

  

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

<强> curl_easy_perform(_curl_handle);

  

curl_easy_getinfo(_curl_handle,CURLINFO_CONTENT_LENGTH_UPLOAD,   &安培; dResult);

相关问题