1 #include "stdafx.h"
2 #include "curl/curl.h"
3 #include "assert.h"
4 //不带SSL
5 #pragma comment(lib, "libcurl.lib")
6
7 /*
8 ptr是指向存储数据的指针,9 size是每个块的大小,10 nmemb是指块的数目,11 stream是用户参数。12 所以根据以上这些参数的信息可以知道,ptr中的数据的总长度是size*nmemb13 */
14 size_t call_wirte_func(const char *ptr, size_t size, size_t nmemb, std::string *stream)15 {16 assert(stream !=NULL);17 size_t len = size *nmemb;18 stream->append(ptr, len);19 returnlen;20 }21 //返回http header回调函数
22 size_t header_callback(const char *ptr, size_t size, size_t nmemb, std::string *stream)23 {24 assert(stream !=NULL);25 size_t len = size *nmemb;26 stream->append(ptr, len);27 returnlen;28 }29
30
31 int _tmain(int argc, _TCHAR*argv[])32 {33 CURL *curl;34 CURLcode code;35 std::stringszbuffer;36 std::stringszheader_buffer;37 charerrorBuffer[CURL_ERROR_SIZE];38 std::string url = "http://api.***.com/CheckUsrBalance";39 /*
40 CURL_GLOBAL_ALL //初始化所有的可能的调用。41 CURL_GLOBAL_SSL //初始化支持 安全套接字层。42 CURL_GLOBAL_WIN32 //初始化win32套接字库。43 CURL_GLOBAL_NOTHING //没有额外的初始化。44 */
45 curl_global_init(CURL_GLOBAL_ALL);46 curl =curl_easy_init();47 if(curl) {48 //远程URL,支持 http, https, ftp
49 curl_easy_setopt(curl, CURLOPT_URL, url.c_str());50 //官方下载的DLL并不支持GZIP,Accept-Encoding:deflate, gzip
51 curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip, deflate");52 //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);//调试信息打开
53
54 /*POST 数据*/
55 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "username=yehua&key=d8kredfsca1f99b8322b3ef326cc9ce261701c4c8hd9esj");56 //设置重定向的最大次数
57 curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 5);58 //设置301、302跳转跟随location
59 curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);60 //抓取内容后,回调函数
61 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, call_wirte_func);62 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &szbuffer);63 //抓取头信息,回调函数
64 curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);65 curl_easy_setopt(curl, CURLOPT_HEADERDATA, &szheader_buffer);66
67 /*
68 CURLE_OK 任务完成一切都好69 CURLE_UNSUPPORTED_PROTOCOL 不支持的协议,由URL的头部指定70 CURLE_COULDNT_CONNECT 不能连接到remote 主机或者代理71 CURLE_REMOTE_ACCESS_DENIED 访问被拒绝72 CURLE_HTTP_RETURNED_ERROR Http返回错误73 CURLE_READ_ERROR 读本地文件错误74 CURLE_SSL_CACERT 访问HTTPS时需要CA证书路径75 */
76 code =curl_easy_perform(curl);77 if (CURLE_OK ==code) {78 doubleval;79
80 /*check for bytes downloaded*/
81 code = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &val);82 if ((CURLE_OK == code) && (val>0))83 printf("Data downloaded: %0.0f bytes.\n", val);84
85 /*check for total download time*/
86 code = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &val);87 if ((CURLE_OK == code) && (val>0))88 printf("Total download time: %0.3f sec.\n", val);89
90 /*check for average download speed*/
91 code = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &val);92 if ((CURLE_OK == code) && (val>0))93 printf("Average download speed: %0.3f kbyte/sec.\n", val / 1024);94
95 printf("%s\n", szbuffer.c_str());96 }97 else{98 fprintf(stderr, "Failed to get '%s' [%s]\n", url, errorBuffer);99 //exit(EXIT_FAILURE);
100 }101
102 /*释放内存*/
103 curl_easy_cleanup(curl);104 }105 curl_global_cleanup();106
107 getchar();108 return 0;109 }