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

posted @ 2017-06-17 16:58  yangxunpeng  阅读(13281)  评论(0编辑  收藏  举报