日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

libcurl远程获取文件大小源码

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libcurl远程获取文件大小源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是一個簡單的獲取遠程文件大小的源碼,我們可以改寫為大批量異步的形式.

#include <stdio.h>
#include <curl/curl.h>size_t get_size_struct(void* ptr, size_t size, size_t nmemb, void* data){return (size_t)(size * nmemb);
}double get_download_size(char* url){CURL* curl;CURLcode res;double size = 0.0;curl = curl_easy_init();curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, get_size_struct);curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);res = curl_easy_perform(curl);res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &size);if(res != CURLE_OK){fprintf(stderr, "curl_easy_getinfo() failed: %s\n", curl_easy_strerror(res));}curl_easy_cleanup(curl);return size;
}int main(int argc, char* argv[]){char url[] = "http://cdimage.ubuntu.com/releases/14.04/release/ubuntu-14.04-desktop-amd64+mac.iso";double filesize = get_download_size(url);printf("[%0.0lf] %s\n", filesize, url);return 0;
}

下面是批量判斷代碼實現的結果


分析和思考:

獲取遠程文件大小中遇到的問題

CURLINFO_CONTENT_LENGTH_DOWNLOAD

Pass a pointer to a double to receive the content-length of the download. This is the value read from the Content-Length: field. Since 7.19.4, this returns -1 if the size isn't known.

使用這個項獲取文件大小,比較受限制,它要求必須在http Response header中帶有Content-Length頭域才可以。如果沒有就獲取不了該長度。而我們知道,如果是chunked傳輸的時候,就肯定沒有content-length頭。所以還需要尋找其他的解決方法。

測試發現,使用這種方法,對大文件(超過2M)的長度獲取還是準確的,但是對html頁面的小文件,因為可能是gzip或是chunk傳輸的,獲取的長度僅只能作為參考。比如未gzip壓縮和gzip壓縮的傳輸方式獲取的長度肯定不是一樣的。

采用這種方法,只能限制大,不限制小,因為小文件獲取不精確。

總結

以上是生活随笔為你收集整理的libcurl远程获取文件大小源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。