1. 程式人生 > >LibCurl HTTP部分詳細介紹

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:[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部分詳細介紹

一、LibCurl基本程式設計框架 二、一些基本的函式 三、curl_easy_setopt函式部分選項介紹 四、curl_easy_perform 函式說明(error 狀態碼) 五、libcurl使用的HTTP訊息頭六、獲取http應答頭資訊 七、多執行緒問題 八、什麼

HTTP cookie 詳細介紹

HTTP Cookie: Cookie通常也叫做網站cookie,瀏覽器cookie或者httpcookie,是儲存在使用者瀏覽器端的,並在發出http請求時會預設攜帶的一段文字片段。它可以用來做使用者認證,伺服器校驗等通過文字資料可以處理的問題。

Http協議詳細介紹 HTTP協議詳細介紹

HTTP協議詳細介紹 當你在瀏覽器位址列敲入“http://www.cnblogs.com/”,然後猛按回車,呈現在你面前的,將是部落格園的首頁了(這真是廢話,你會認為這是理所當然的

Http協議詳細介紹

服務器響應時間 重點 tool attach col 人員 釋放資源 height fir HTTP協議詳細介紹 當你在瀏覽器地址欄敲入“http://www.cnblogs.com/”,然後猛按回車

Http session詳細介紹(jsp-serlvet技術)

參考文件一、術語session在我的經驗裡,session這個詞被濫用的程度大概僅次於transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/訊息,比如打電話時從拿起電話撥號到結束通話電話這

libcurl庫的http部分介紹

//採用CURLOPT_RESUME_FROM_LARGE 實現檔案斷點續傳功能 #include <stdlib.h> #include <stdio.h> #include <sys/stat.h> #include <curl/curl.h> //這個

HTTP(一)、詳細介紹

HTTP 概述 HTTP 是一種獲取網路資源的通訊協議,它是Web進行交換資料的基礎,是一種client-server協議。 通常,客戶端是由像瀏覽器這樣的接收方發起的,服務端一般分為Web伺服器或者Ftp檔案伺服器。 一個完整的Web頁面是由不同的子文件拼接而

TCP傳輸控制協議(初步簡單介紹一下,後結針對各部分詳細陳述)

1、ARQ(automatic repeatable request)和重傳 涉及定時器(RTO)、序列號、ACK報文 2、分組視窗和滑動視窗 傳送視窗結構如下圖: 接收視窗結構如下圖: 3、變數視窗大小由流量控制和擁塞控制決定 流量控制:是針對收發方的視

Beego獲取http請求內容詳細介紹

       beego是一個使用 Golang 來設計的快速構建並開發 Go 應用程式的開源http框架,可以快速開發API、Web、後端服務等各種應用,功能支援RESTFul,MVC模型;含有智慧路由,內建強大模組,採用了 Go 原生的 http 包來處理

3.1 HTTP報文的結構及各部分介紹

HTTP通訊過程包括從客戶端發往伺服器端的請求及從伺服器端返回客戶端的響應。本節我們來了解一下請求和響應是怎樣運作的。 1.我們先來解釋一下HTTP報文的構成。 什麼是HTTP報文?        用於HTTP協議互動的資訊被稱為HTTP報文,HTTP報文字身是由多行資料構

HTTP提交方式之PUT詳細介紹及POST和PUT的區別

POST是用來提交資料的。提交的資料放在HTTP請求的正文裡,目的在於提交資料並用於伺服器端的儲存,而不允許使用者過多的更改相應資料(主要是相對於在url 修改要麻煩很多)。PUT操作是冪等的。所謂冪等是指不管進行多少次操作,結果都一樣。比如我用PUT修改一篇文章,然後在做同

dzz雲桌面1.2演示,及部分功能詳細介紹

DZZ1.2一些截圖 DZZ主題 MAC主題 WINDWOS經典主題 多桌面 使用者多桌面由系統管理員在後臺設定,可設定任意多的桌面數量,不過為保證效率,建議設定在3-7個桌面比較適宜。 管理員自定義桌面 管理員可定義桌面型別,連結型別的桌面。應用

全面詳細介紹libcurl的使用

curl是Linux下一個非常著名的下載庫,通過這個庫,可以很簡單的實現檔案的下載等操作。 看一個簡單的例子: #include

RabbitMQ基礎概念詳細介紹

可用性 將不 tar connect 相互 abi 封裝 編寫 綁定 原文地址:http://www.diggerplus.org/archives/3110 引言 你是否遇到過兩個(多個)系統間需要通過定時任務來同步某些數據?你是否在為異構系統的不同進程間相互調用、通

dede_archives文章主表詳細介紹

small 選項 key 標題 varchar col cms cores ann dedecms二次開發目錄點這個:dedecms二次開發教程目錄 字段 類型 整理 屬性 Null 默認 額外 id mediumin

JS 事件綁定、事件監聽、事件委托詳細介紹

兼容性 log 查看 and == 常用 提高 監聽 live 事件綁定 要想讓 JavaScript 對用戶的操作作出響應,首先要對 DOM 元素綁定事件處理函數。所謂事件處理函數,就是處理用戶操作的函數,不同的操作對應不同的名稱。 在JavaScript中,有三種常用的

dede_addonimages圖片附加表主表詳細介紹

image 下載 復制 ati logs top 選項 span lsp dedecms二次開發目錄點這個:dedecms二次開發教程目錄 字段 類型 整理 屬性 Null 默認 額外 aid mediumint(

hibernate主鍵詳細介紹

tab merge ren net 對象 num rac 16進制 鍵值 /** * * @author liuguangyi * @content ejb3註解的API定義在javax.persistence.*包裏面。 * * 註釋說

js原型鏈部分詳細使用說明案例

一個 foo *** 根據 str fin 屬性 font itl 1. ‘index.html‘文件 ```html <!DOCTYPE html> <html lang="en"> <head>