如何使用libcurl实现HTTP的GET方法获取文件长度
来源:互联网 发布:握奇数据 编辑:程序博客网 时间:2024/04/29 17:57
在项目中,需要做一个下载中间件,查看资料发现libcurl很适合,因此选用libcurl来实现HTTP下载功能。
可以完美解决用GET获取文件长度,而不下载文件内容。
用libcurl实现下载功能很方便,只要调用libcurl库的
- curl_easy_init()
- curl_easy_setopt()
- curl_easy_perform()
- curl_easy_getinfo()
就可以完成http下载,并且libcurl教程很多,网上资料也很多。
对于libcurl获取文件长度,网上比较多的做法如下:
- long downloadFileLenth = 0;
- CURL *handle = curl_easy_init();
- curl_easy_setopt(handle, CURLOPT_URL, url);
- curl_easy_setopt(handle, CURLOPT_HEADER, 1); //只要求header头
- curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
- if (curl_easy_perform(handle) == CURLE_OK)
- {
- curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
- }
- else {
- downloadFileLenth = -1;
- }
- curl_easy_cleanup(handle);
但是这种做法,默认是通过HTTP的HEAD方式来获取的,但是并不是所有HTTP的服务器都是支持HEAD方式来获取,比如说本人项目中,
有个HTTP server就不支持HEAD方式,而只能使用GET方式来获取文件长度,所以这种方式不可行, 本希望能够使用如下代码段来实现:
- long downloadFileLenth = 0;
- CURL *handle = curl_easy_init();
- curl_easy_setopt(handle, CURLOPT_URL, url);
- curl_easy_setopt(handle, CURLOPT_HTTPGET, 1); //使用HTTPGET
- curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
- if (curl_easy_perform(handle) == CURLE_OK)
- {
- curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
- }
- else {
- downloadFileLenth = -1;
- }
- curl_easy_cleanup(handle);
但是发现还是用的HEAD方式获取,查看libcurl源代码发现,当设置CURLOPT_NOBODY,libcurl会默认设置获取方式为HEAD方式,如果把
set nobody的option去掉,又会下载文件内容!所以上面代码无法满足。
没办法只能看libcurl源代码,终于发现如下解决方案:
- long downloadFileLenth = 0;
- CURL *handle = curl_easy_init();
- curl_easy_setopt(handle, CURLOPT_URL, url);
- curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, “GET”); //使用CURLOPT_CUSTOMREQUEST
- curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需求body
- if (curl_easy_perform(handle) == CURLE_OK)
- {
- curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &downloadFileLenth);
- }
- else {
- downloadFileLenth = -1;
- }
- curl_easy_cleanup(handle);
可以完美解决用GET获取文件长度,而不下载文件内容。
0 0
- 如何使用libcurl实现HTTP的GET方法获取文件长度
- 如何使用libcurl实现HTTP的GET方法获取文件长度
- 如何使用libcurl实现HTTP的GET方法获取文件长度
- libcurl使用HTTP的get请求来下载文件
- 使用Http Head方法获取文件长度
- libcurl库的http get和http post使用
- libcurl库的http get和http post使用
- 使用libcurl实现简单的HTTP访问
- 实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现
- 实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现
- libcurl get post http
- libcurl http get
- 关于Http Get方法提交URL最大长度的限制
- 使用libcurl获取经过gzip压缩的网页文件
- 使用libcurl获取经过gzip压缩的网页文件
- c语言获取文件长度的方法
- C中获取文件长度的方法
- 使用libcurl库编写HTTP客户端(包括GET/POST/HTTPS)
- 十六进制字符串转换成十进制整数 天梯赛模拟题重现一
- Android 源码在线查看
- Nor Flash 代码压缩
- 最长递增子序列
- 七个对我最重要的职业建议
- 如何使用libcurl实现HTTP的GET方法获取文件长度
- Android——华为虚拟键盘EditText被顶起
- 蓝桥杯 算法训练 出现次数最多的整数
- numpy中array和asarray的区别
- va_start 与 va_end用法
- web前端之html从零开始(二)----a标签学习,强化
- SharedPreferences存储使用
- 商城产品浏览记录,看了又看一种实现思路
- eclipse-常用快捷键