使用的是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;
}