C++用libcurl實現http服務


在C++程序中要和web服務器通信,可以使用libcurl實現httpf服務。libcurl是一個跨平台的網絡協議庫,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 協議。libcurl同樣支持HTTPS證書授權,HTTP POST, HTTP PUT, FTP 上傳, HTTP基本表單上傳,代理,cookies,和用戶認證。下載地址是:http://curl.haxx.se/download.html。

我是把這一系列的操作封裝在dll中的,供其他模塊使用。

strUrl為url地址
szPost為post參數。
extern "C" __declspec(dllexport) int __cdecl https_post(const char* strUrl,char *szPost) { CURL *curl; CURLcode res; res_buf = ""; curl = curl_easy_init(); //初始化 if(curl&&strUrl) { curl_easy_setopt(curl,CURLOPT_URL,strUrl); //設置url地址 if(szPost) { curl_easy_setopt(curl,CURLOPT_POSTFIELDS,szPost); //設置post參數 } curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_func); //設置回調函數
         curl_easy_setopt(curl, CURLOPT_POST, 1);                 //設置為非0表示本次操作為POST curl_easy_setopt(curl,CURLOPT_WRITEDATA,&res_buf); //設置寫數據 res = curl_easy_perform(curl); //執行 if(res == CURLE_OK) {
            //執行成功后的相關操作   curl_easy_cleanup(curl);   return 1; } return -1; } return -1; }
static void write_func(char *ptr,size_t size,size_t nmemb,void *userdata)         //回調函數
{
	string& buffer = *(string*)userdata;
	size_t len = size*nmemb;
	for(size_t i = 0;i<len;++i)
	{
		buffer += *ptr;
		++ptr;
	}
}

  

 

常見的一些操作:

curl_easy_setopt(curl, CURLOPT_URL, POSTURL);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, POSTFIELDS);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr);
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_HEADER, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);

CURLOPT_URL: URL地址
CURLOPT_POSTFIELDS: POST參數
CURLOPT_WRITEFUNCTION: 對返回的數據進行操作的函數地址
CURLOPT_WRITEDATA: 設置WRITEFUNCTION的第四個參數值
CURLOPT_POST: 設置為非0表示本次操作為POST
CURLOPT_VERBOSE: 設置為非0在執行時打印請求信息
CURLOPT_HEADER: 設置為非0將響應頭信息同響應體一起傳給WRITEFUNCTION
CURLOPT_FOLLOWLOCATION: 設置為非0,響應頭信息Location


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM