c++ 如何在cURL二进制get请求中获取文件长度而不下载文件

w3nuxt5m  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(201)

我想用一些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不能从服务器获取文件长度信息?

41ik7eoe

41ik7eoe1#

CURLINFO_CONTENT_LENGTH_UPLOAD是上传的字节数。您需要使用CURLINFO_CONTENT_LENGTH_DOWNLOAD
请注意,如果服务器动态生成数据,则实际下载文件时的长度与仅下载文件头时的长度可能不同。
还要注意的是,如果服务器在下载时发送压缩的数据,头中可能没有任何可用的大小(如果使用Transfer-Encoding头而不是Content-Length头),所以CURLINFO_CONTENT_LENGTH_DOWNLOAD仍然会返回-1。在这种情况下,唯一知道大小的方法是完整下载。

cnwbcb6i

cnwbcb6i2#

你试过CURLINFO_CONTENT_LENGTH_DOWNLOAD吗?

nhjlsmyf

nhjlsmyf3#

需要调用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);

相关问题