curl获取文件长度

在使用libcurl进行HTTP GET请求下载文件时,可以通过设置CURLOPT_WRITEFUNCTION回调来接收数据。在回调函数中,你可以通过传入的CURL*指针来获取HTTP响应头信息,从而获取content length(内容长度)。

以下是一个简单的例子,展示如何在回调函数中获取content length:

#include <curl/curl.h>
#include <stdio.h>
#include <stdlib.h>

// 写数据回调函数
size_t write_data(void *ptr, size_t size, size_t nmemb, void *userdata) {
// 这里可以处理下载的数据,userdata可以是一个文件指针或其他用于保存数据的结构体
// 例如,将数据写入文件
FILE *fp = (FILE *)userdata;
size_t written = fwrite(ptr, size, nmemb, fp);
return written;
}

// 获取content length的回调函数
int header_callback(char *buffer, size_t size, size_t nitems, void *userdata) {
// 这里的buffer是包含HTTP头信息的缓冲区
// 检查是否包含content-length头
char *content_length_header = strstr(buffer, “Content-Length:”);
if (content_length_header) {
long long content_length = 0;
// 解析content length
sscanf(content_length_header, “Content-Length: %lld”, &content_length);
// 输出content length
printf(“Content Length: %lld\n”, content_length);
// 可以将content length保存到userdata中
}
return strlen(buffer);
}

int main(void) {
CURL *curl;
FILE *fp;

curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl) {
    fp = fopen("downloaded.file", "wb");
    if(fp) {
        // 设置URL
        curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/file.txt");

        // 设置写数据回调函数
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);

        // 设置头信息回调函数
        curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);

        // 设置用户数据
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

        // 执行HTTP GET请求
        curl_easy_perform(curl);

        // 关闭文件
        fclose(fp);
    }

    // 清理cURL资源
    curl_easy_cleanup(curl);
}

curl_global_cleanup();
return 0;

}

在这个例子中,header_callback函数会被libcurl在接收到每一个HTTP头信息时调用。这个函数检查是否有Content-Length头,如果有,就解析出内容长度并输出。你可以在这个函数中做任何你需要做的事情来保存或处理这个内容长度信息。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值