curl post 日志_使用Curl做Post请求

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 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值