osx上libcurl使用,简单,不用编译,使用brew很方便,windows平台需要自己编译。
现在github或是官网去下载包里projects\Windows直接有工程,选择相应的vs版本编译即可。
将库加入工程,编译报错
1>bitminner.obj : error LNK2001: 无法解析的外部符号 __imp__curl_global_init
1>bitminner.obj : error LNK2001: 无法解析的外部符号 __imp__curl_easy_init
1>bitminner.obj : error LNK2001: 无法解析的外部符号 __imp__curl_easy_setopt
1>bitminner.obj : error LNK2001: 无法解析的外部符号 __imp__curl_easy_perform
1>bitminner.obj : error LNK2001: 无法解析的外部符号 __imp__curl_easy_strerror
1>bitminner.obj : error LNK2001: 无法解析的外部符号 __imp__curl_easy_cleanup
1>bitminner.obj : error LNK2001: 无法解析的外部符号 __imp__curl_global_cleanup
需要在c++预处理中加入BUILDING_LIBCURL;HTTP_ONLY
添加lib库文件
ws2_32.lib;wldap32.lib
附上一段post例程
struct MemoryStruct {
char *memory;
size_t size;
};
static size_t
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)userp;
mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1);
if (mem->memory == NULL) {
/* out of memory! */
printf("not enough memory (realloc returned NULL)\n");
return 0;
}
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}
int curl_post(void)
{
CURL *curl;
CURLcode res;
struct MemoryStruct chunk;
static const char *postthis = "Field=1&Field=2&Field=3";
chunk.memory = (char*)malloc(1); /* will be grown as needed by realloc above */
chunk.size = 0; /* no data at this point */
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.1.1/");
/* send all data to this function */
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
/* we pass our 'chunk' struct to the callback function */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
/* some servers don't like requests that are made without a user-agent
field, so we provide one */
curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postthis);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 2);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 2);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
/* if we don't provide POSTFIELDSIZE, libcurl will strlen() by
itself */
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(postthis));
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
else {
/*
* Now, our chunk.memory points to a memory block that is chunk.size
* bytes big and contains the remote file.
*
* Do something nice with it!
*/
printf("%s\n", chunk.memory);
}
/* always cleanup */
curl_easy_cleanup(curl);
free(chunk.memory);
/* we're done with libcurl, so clean it up */
curl_global_cleanup();
}
return 0;
}
对于windows,https支持,需编译openssl版本,并且附件openssl库
libeay32.lib
ssleay32.lib