1. 程式人生 > >C++用libcurl庫進行http通訊網路程式設計

C++用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; }

相關推薦

C/C++ libcurl進行http通訊網路程式設計

五、libcurl使用的HTTP訊息頭     當使用libcurl傳送http請求時,它會自動新增一些http頭。我們可以通過CURLOPT_HTTPHEADER屬性手動替換、新增或刪除相應 的HTTP訊息頭。     Host     http1.1(大部分http1.0)版本都要求客戶端請求提供這個資

C++libcurl進行http通訊網路程式設計

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

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 並對

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-

windows c/c++使用libevent編寫http/https服務端

一、前言 本文章旨在對自己接觸過的專案的一種溫習回顧,以此編寫作為筆記,也希望能幫到各位有需要的道友, 若有任何建議或探討可加 QQ群進行交流:887939177 二、間單描述 建立http server,只需編譯libevent庫即可,若想建立https

libcurlhttp get和http post使用【轉】

一、libcurl中的http get使用方法   1. 為什麼要使用libcurl 1) 作為http的客戶端,可以直接用socket連線伺服器,然後對到的資料進行http解析,但要分析協議頭,實現代理…這樣太麻煩了。   2) libcur

VLFeat進行k-means聚類

摘要 本文將介紹如何使用VLFeat開源庫來進行K-means聚類,關於K-means的介紹可以參考這裡。 什麼是VLFeat 用VLFeat官方主頁的話來說,VLFeat 是一個實現了視覺領域諸多演算法的開源庫,其包括SIFT, MSER,  k-means,hierarchical k-means

libcurlhttp部分介紹

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

C/C++使用libcurl實現post圖片的兩種方式

一.直接上傳檔案方式將圖片檔案跟在引數的後面,這裡的curl和引數需要根據自己的需要修改    char *url="         ";    CURL *pCurl = NULL;CURLcode res;struct curl_slist *headerlist =

C呼叫libcurl函式 查詢全文搜尋引擎 Elasticsearch

//執行在ubuntu64系統下//curles.c#include <stdio.h>#include <curl/curl.h>#include <string.h>size_t write_data(void *ptr, size_t

C/C++中libcurl的使用-Http GET方法使用詳解

//getDataByCurl.cpp #include <iostream> #include <string> #include <curl/curl.h> #include <curl/types.h>; #include <curl/easy

C++使用thread類進行多執行緒程式設計

C++11中引入了一個用於多執行緒操作的thread類,簡單多執行緒示例: #include <iostream> #include <thread> #include <Windows.h> using namespace std; void thread01(

C#學習筆記(12)- Socket網路程式設計

理解Socket 人通過電話可以通訊 程式之間通過Socket來通訊 套接字就是程式間的電話機 協議就是程式與程式之間的通用語言:TCP與UDP協議 Socket的英文原義是“孔”或“插座”。作為程序通訊機制,取後一種意思。通常也稱作“套接字”,用於描述I

Python 實現程序間通訊(網路程式設計)

【網路程式設計】   1):網路程式設計是什麼意思,網路程式設計指的是不同機器之間通過網編相互發資訊,我們常用的“QQ”,“微信”,“郵箱” 都個網編程式設計的應用;   網編程式設計在技術上還有另一個叫法叫“程序間通訊”,程序間通訊這個名字能更好體現技術的內涵,說白了就是一個程序給另一個程序發   資訊;

使用CCHttpClient進行cocos2d-x網路程式設計

在我使用的cocos2d-x版本(2.1.2)中,已經將curl融進cocos2d-x框架中。下面動手寫個簡單的網路程式。    首先建立一個cocos2d-x專案。     然後我建立了一個網路連線的類,名叫HttpNetConn。其繼承自CCObject,管理網路連

使用netty進行客戶端網路程式設計及斷線重連功能實現

       不管做哪個方向開發,都會有那麼一兩個牛B閃閃的庫,可以極大的方便開發,比如java網路程式設計中的netty庫。無論客戶端還是服務端網路程式設計,netty基本都是首選網路庫,健壯、高效、穩定,並且已經得到很多商業專案驗證。        當用netty進行客

c語言libcurl網路http操作程式設計使用

http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目錄索引: 一、LibCurl基本程式設計框架 二、一些基本的函式 三、curl_easy_setopt函式部分選項介紹 四、curl_e

C++ Boost asio網路通訊 [同/非同步] 筆記

此文轉自:http://blog.csdn.net/misskissC/article/details/9985167 1 C++ Boost庫asio網路通訊類核心結構 在C++ Boost庫中用於通訊的類的層次為boost::asio::ip,所有有關通訊的類別都