windows下libcurl的使用

使用的是curl-7.26.0版本,这个版本下的根目录下有.dsw文件,个人只是觉得使用编译方便点,其他版本未深究

解压

打开根目录下的curlxxx.dsw

选择libcurl,单编译这个release

=======================

使用的时候

 

指定VC路径

include到目录里面的indclude

lib库指到刚编译的lib\release_lib\

1、给工程添加依赖的库:项目->属性->链接器->输入->附加依赖项,把libcurl.lib ws2_32.lib winmm.lib wldap32.lib添加进去

注意,debug配置用libcurld.lib

2、加入预编译选项:项目->属性->c/c++ ->预处理器->预处理器,把  ;BUILDING_LIBCURL;HTTP_ONLY复制进去(注意不要丢了";")

就可以静态编译了.

这里再附上本人的一个使用libcurl通过http上传文件内容的demo:

int _tmain(int argc, TCHAR* argv[])
{
	/*TCHAR szAppData[MAX_PATH] = {0};
	SHGetSpecialFolderPath(NULL, szAppData, CSIDL_APPDATA, TRUE);*/

	if(argc < 4) return 0;

	CURL *curl;   
	CURLcode ret;   
	CURLM *multi_handle;  
	CURLcode code;
	int still_running;  
	int  wr_error;

	struct curl_httppost *formpost=NULL;  
	struct curl_httppost *lastptr=NULL;  
	struct curl_slist *headerlist=NULL;  
	static char buf[256]={0};
	char** argvArr = new char*[argc-1];
	for(int i = 1; i < argc; i++)
	{
		argvArr[i-1] = new char[128];
		memset(argvArr[i-1],0,sizeof(argvArr[i-1]));
		wcharTochar(argv[i],argvArr[i-1],sizeof(argvArr[i-1]));
	}
	_tprintf(TEXT("LogFile:%s,SizeOfUpload:%sB,Uid:%s.\n"),argv[1],argv[2],argv[3]);
	unsigned char secText[256]={0};
	time_t ts = time(NULL);
	sprintf((char*)secText,"%i64d",ts);
	MD5 md5;
	md5.GenerateMD5(secText,strlen((const char*)secText));	//使用MD5生成token,项目需要
	sprintf(buf,"access_token:%s\n"
		"uid:%s\n"
		"machine_id:mac\n"
		"log_file:%s\n"
		"platform:1\n"
		"line_number:0\n"
		"count:0\n"
		"date_Time:0\n"
		"appid:dev\n"
		"ts:%i64d\n"
		"encoding:gb2312",md5.ToString().c_str(),argvArr[2],"logent.lg",time(NULL));

	wr_error = 0;   
	wr_index = 0;   

	/* First step, init curl */   
	curl = curl_easy_init();   
	if (!curl) {   
		printf("couldn't init curl ");   
		return 0;   
	}   
	
    char pBufDest[1024];
    LPCTSTR pStr = argv[1];	//上传文件的本地地址
    GetLastLog(pStr, 0, 0,pBufDest, atoi(argvArr[1])); //读取文件内容,argvArr[1]是读取的字节数
  
  /* Fill in the file upload field. This makes libcurl load data from 
     the given file name when curl_easy_perform() is called. */  
  //curl_formadd(&formpost,  
  //             &lastptr,  
  //             CURLFORM_COPYNAME, "sendfile",  
  //             CURLFORM_FILE, "postit2.c",  
  //             CURLFORM_END);  
  //
  ///* Fill in the filename field */  
  //curl_formadd(&formpost,  
  //             &lastptr,  
  //             CURLFORM_COPYNAME, "filename",  
  //             CURLFORM_COPYCONTENTS, "postit2.c",  
  //             CURLFORM_END);  
  //
  ///* Fill in the submit field too, even if this is rarely needed */  
  //curl_formadd(&formpost,  
  //             &lastptr,  
  //             CURLFORM_COPYNAME, "submit",  
  //             CURLFORM_COPYCONTENTS, "send",  
  //             CURLFORM_END);  
  
	curl = curl_easy_init();  
	//multi_handle = curl_multi_init();  

	headerlist = curl_slist_append(headerlist, buf);  
	// if(curl && multi_handle) {  

	/* what URL that receives this POST */  
	//curl_easy_setopt(curl, CURLOPT_URL, "http://m.yy.com/earn /log/upload");  
	curl_easy_setopt(curl, CURLOPT_URL, "http://172.19.42.120:9000/log/upload");
	curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);  

	curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);  
	curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);  
	curl_easy_setopt(curl, CURLOPT_POSTFIELDS, pBufDest);
	// 设置回调函数  
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);  
	//设置写数据  
	int res = 0;  
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&res);  
	code = curl_easy_perform(curl);

	if(code == CURLcode::CURLE_OK)  
	{  
		long responseCode = 0;  
		curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode);  
		if (responseCode < 200 || responseCode >= 300 || res == 1)  
		{  
			return false;  
		}  
		//下面可以对应答的数据进行处理了  
		// strData  

		printf("%s.\n",UTF8ToGBK(wr_buf).c_str());
	}  

	// 清除curl对象  
	curl_easy_cleanup(curl); 

	system("pause");
	return 0;
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值