我想用一些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条答案
按热度按时间41ik7eoe1#
CURLINFO_CONTENT_LENGTH_UPLOAD
是上传的字节数。您需要使用CURLINFO_CONTENT_LENGTH_DOWNLOAD
。请注意,如果服务器动态生成数据,则实际下载文件时的长度与仅下载文件头时的长度可能不同。
还要注意的是,如果服务器在下载时发送压缩的数据,头中可能没有任何可用的大小(如果使用
Transfer-Encoding
头而不是Content-Length
头),所以CURLINFO_CONTENT_LENGTH_DOWNLOAD
仍然会返回-1
。在这种情况下,唯一知道大小的方法是完整下载。cnwbcb6i2#
你试过
CURLINFO_CONTENT_LENGTH_DOWNLOAD
吗?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);