libcurl庫的http部分介紹
//採用CURLOPT_RESUME_FROM_LARGE 實現檔案斷點續傳功能 #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> #include <curl/curl.h> //這個函式為CURLOPT_HEADERFUNCTION引數構造 /* 從http頭部獲取檔案size*/ size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream) { int r; long len = 0; /* _snscanf() is Win32 specific */ // r = _snscanf(ptr, size * nmemb, "Content-Length: %ld\n", &len); r = sscanf(ptr, "Content-Length: %ld\n", &len); if (r) /* Microsoft: we don't read the specs */ *((long *) stream) = len; return size * nmemb; } /* 儲存下載檔案 */ size_t wirtefunc(void *ptr, size_t size, size_t nmemb, void *stream) { return fwrite(ptr, size, nmemb, stream); } /*讀取上傳檔案 */ size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream) { FILE *f = stream; size_t n; if (ferror(f)) return CURL_READFUNC_ABORT; n = fread(ptr, size, nmemb, f) * size; return n; } // 下載 或者上傳檔案函式 int download(CURL *curlhandle, const char * remotepath, const char * localpath, long timeout, long tries) { FILE *f; curl_off_t local_file_len = -1 ; long filesize =0 ; CURLcode r = CURLE_GOT_NOTHING; int c; struct stat file_info; int use_resume = 0; /* 得到本地檔案大小 */ //if(access(localpath,F_OK) ==0) if(stat(localpath, &file_info) == 0) { local_file_len = file_info.st_size; use_resume = 1; } //採用追加方式開啟檔案,便於實現檔案斷點續傳工作 f = fopen(localpath, "ab+"); if (f == NULL) { perror(NULL); return 0; } //curl_easy_setopt(curlhandle, CURLOPT_UPLOAD, 1L); curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath); curl_easy_setopt(curlhandle, CURLOPT_CONNECTTIMEOUT, timeout); // 設定連線超時,單位秒 //設定http 頭部處理函式 curl_easy_setopt(curlhandle, CURLOPT_HEADERFUNCTION, getcontentlengthfunc); curl_easy_setopt(curlhandle, CURLOPT_HEADERDATA, &filesize); // 設定檔案續傳的位置給libcurl curl_easy_setopt(curlhandle, CURLOPT_RESUME_FROM_LARGE, use_resume?local_file_len:0); curl_easy_setopt(curlhandle, CURLOPT_WRITEDATA, f); curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, wirtefunc); //curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc); //curl_easy_setopt(curlhandle, CURLOPT_READDATA, f); curl_easy_setopt(curlhandle, CURLOPT_NOPROGRESS, 1L); curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L); r = curl_easy_perform(curlhandle); fclose(f); if (r == CURLE_OK) return 1; else { fprintf(stderr, "%s\n", curl_easy_strerror(r)); return 0; } } int main(int c, char **argv) { CURL *curlhandle = NULL; curl_global_init(CURL_GLOBAL_ALL); curlhandle = curl_easy_init(); //download(curlhandle, "ftp://user:編譯gcc resume.c -o resume –lcurl[email protected]/path/file", "C:\\file", 0, 3); download(curlhandle , "http://software.sky-union.cn/index.asp","/work/index.asp",1,3); curl_easy_cleanup(curlhandle); curl_global_cleanup(); return 0; }
相關推薦
libcurl庫的http部分介紹
//採用CURLOPT_RESUME_FROM_LARGE 實現檔案斷點續傳功能 #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> #include <curl/curl.h> //這個
LibCurl HTTP部分詳細介紹
//採用CURLOPT_RESUME_FROM_LARGE 實現檔案斷點續傳功能 #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> #include <curl/curl.h> //這個
轉:LibCurl HTTP部分詳細介紹
一、LibCurl基本程式設計框架 二、一些基本的函式 三、curl_easy_setopt函式部分選項介紹 四、curl_easy_perform 函式說明(error 狀態碼) 五、libcurl使用的HTTP訊息頭六、獲取http應答頭資訊 七、多執行緒問題 八、什麼
C/C++使用libcurl庫發送http請求(get和post可以用於請求html信息,也可以請求xml和json等串)
網絡連接 get 編譯 eas views vs2015 return tar linux C++要實現http網絡連接,需要借助第三方庫,libcurl使用起來還是很方便的 環境:win32 + vs2015 如果要在Linux下使用,基本同理 1,下載
linux下使用libcurl庫開發http請求客戶端
一、運用開源庫libcurl開發http請求客戶端,實現檔案上傳和字串傳送的功能 /****************************************************** *** Copyright(C) *** author Lu GuoFu *** date 2018-
libcurl庫的http get和http post使用【轉】
一、libcurl中的http get使用方法 1. 為什麼要使用libcurl 1) 作為http的客戶端,可以直接用socket連線伺服器,然後對到的資料進行http解析,但要分析協議頭,實現代理…這樣太麻煩了。 2) libcur
C++ 用libcurl庫進行http 網路通訊程式設計
五、libcurl使用的HTTP訊息頭 當使用libcurl傳送http請求時,它會自動新增一些http頭。我們可以通過CURLOPT_HTTPHEADER屬性手動替換、新增或刪除相應 的HTTP訊息頭。 Host http1.1(大部分http1.0)版本都要求客戶端請求提供這個
C/C++ 用libcurl庫進行http通訊網路程式設計
五、libcurl使用的HTTP訊息頭 當使用libcurl傳送http請求時,它會自動新增一些http頭。我們可以通過CURLOPT_HTTPHEADER屬性手動替換、新增或刪除相應 的HTTP訊息頭。 Host http1.1(大部分http1.0)版本都要求客戶端請求提供這個資
C/C++使用libcurl庫傳送http請求
C++要實現http網路連線,需要藉助第三方庫,libcurl使用起來還是很方便的 環境:win32 + vs2015 如果要在linux下使用,用cmake編譯,使用基本同理 1,下載編譯libcurl 下載curl原始碼,找到vs工程,按照x86 x64 並對
libcurl庫的使用支援http、https、ftp(上傳、下載、遠端目錄列表獲取)
這裡是libcurl庫的一個簡單封裝,支援跨平臺。宣告: 本文章可以轉載,但必須註明源部落格地址。共享的demo和curltools類不允許個人上傳網路賺取積分和現金,如有發現必定追究責任,請慎重。直接下載我上傳的資源把curl資料夾解壓到工程程式碼目錄下匯入curlt
c語言libcurl網路http操作程式設計庫使用
http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目錄索引: 一、LibCurl基本程式設計框架 二、一些基本的函式 三、curl_easy_setopt函式部分選項介紹 四、curl_e
C++用libcurl庫進行http通訊網路程式設計
//採用CURLOPT_RESUME_FROM_LARGE 實現檔案斷點續傳功能 #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> #include <curl/curl.h> //這個
第二百七十五節,MySQL數據庫安裝和介紹
關閉 離線 har 內存 query 命令 臨時 rdb 執行文件 MySQL數據庫安裝 一、概述 1、什麽是數據庫 ? 答:數據的倉庫,稱其為數據庫 2、什麽是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ? 答:他們均是一
Neo4J圖庫的基礎介紹(一)
嵌入 模型 數據模型 特性 所有 並且 int 項目 語言 ?Neo4j是一個高性能的,NOSQL圖形數據庫,它完全支持ACID(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))數據庫事務屬性,采
node 模塊部分介紹
生成 nod 介紹 super 報告 gen 服務 框架 agent chai 斷言框架 mocha mochawesome 對mocha 定制報告,生成完整成熟的報告。 node-fetch 服務器版fetch superagent 是node 客戶端請求
HTTP 之 HTTP概念介紹
http 協議 術語 工作機制1 概述本文將對HTTP協議的發展,相關術語,工作機制進行介紹2 HTTP協議發展介紹.http/0.9:1991,原型版本,功能簡陋,只有一個命令GETGET /index.html ,服務器只能回應HTML格式字符串,不能回應別的格式.http/1.0: 1996年5月,
memcached數據庫簡單配置介紹
正常 rep vim local 遠程 system 只需要 get XML 一.memcached數據庫(基於內存的儲存方式;默認端口11211)1.裝包yum -y install memcached telnet (telnet是一款遠程訪問工具,mem軟件無客戶
數據庫的相關介紹
階段 需要 主鍵約束 圖層 文件 接收 備份 面向 serve 數據庫的相關介紹 文件管理系統的缺點: 編寫應用程序不方便 數據冗余不可避免 應用程序依賴性 不支持對文件的並發訪問 數據間聯系弱 難以按用戶視圖表示數據
Oracle數據庫基本操作 —— Oracle數據庫體系結構介紹、DDL、DCL、DML
back 存儲 rop oracle數據 none run 單元 修改表 多列 一、Oracle數據庫介紹 1、基本介紹 Oracle數據庫系統是美國ORACLE公司(甲骨文)提供的以分布式數據庫為核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVE
Linux nginx-http配置介紹
Linux nginxnginx工作流程圖 http部分工作流程大致如一個master開啟多個worker,網絡io一般用epoll實現當個worker的高並發,文件io用sendfile,aio等高效移步io,實現一個http請求響應。io部分請參考:http://blog.51cto.com/marvin