libcurl简单使用

1.发送请求获取数据

 

复制代码
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <curl/curl.h>
 5  
 6 #define LOGINSTATEURL "URL"
 7 #define REFERERINDEX "Referer: referer url"
 8  
 9 size_t call_back(void* buffer,size_t size,size_t nmemb,void *stream)
10 {
11     char *buf = (char *)stream;
12     strcpy(buf, (char*)buffer);
13     return size*nmemb;
14 }
15  
16 int main(int argc,char *argv[])
17 {
18     int ret = 0;
19     CURL *curl;
20     CURLcode res;
21     struct curl_slist *headers = NULL;
22     char buf[2048] = "";
23     curl = curl_easy_init();
24     if (!curl)
25     {
26         sfw_printf("Failed init login curl\n");
27         return 0;
28     }
29     headers = curl_slist_append(headers,REFERERINDEX);
30     curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
31     curl_easy_setopt(curl,CURLOPT_URL,LOGINSTATEURL);
32     curl_easy_setopt(curl,CURLOPT_POSTFIELDS,""); 
33         
34     curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,call_back);
35     curl_easy_setopt(curl,CURLOPT_WRITEDATA,&buf); 
36         
37     curl_easy_setopt(curl,CURLOPT_POST,1); 
38     //curl_easy_setopt(curl,CURLOPT_VERBOSE,1); //打印调试信息
39     //curl_easy_setopt(curl,CURLOPT_HEADER,0); //将响应头信息和相应体一起传给call_back
40     curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1); //设置为非0,响应头信息location
41     //curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"/tmp/cookie");//从文件读取cookie
42     curl_easy_setopt(curl,CURLOPT_COOKIE,"cookie str");
43  
44     res = curl_easy_perform(curl);
45     if (res != CURLE_OK)
46     {
47         switch(res)
48         {
49             case CURLE_UNSUPPORTED_PROTOCOL:
50                 fprintf(stderr,"不支持的协议,由URL的头部指定\n");
51             case CURLE_COULDNT_CONNECT:
52                 fprintf(stderr,"不能连接到remote主机或者代理\n");
53             case CURLE_HTTP_RETURNED_ERROR:
54                 fprintf(stderr,"http返回错误\n");
55             case CURLE_READ_ERROR:
56                 fprintf(stderr,"读本地文件错误\n");
57             default:
58                 fprintf(stderr,"返回值:%d\n",res);
59         }
60         return -1;
61     }
62 
63     const char *success_str = "\"success\":true";
64     char *success = strstr(buf, success_str);
65     if (NULL != success)
66     {
67         ret=1;
68     } 
69     else
70     {
71         ret=0;
72     }
73     curl_slist_free_all(headers);
74     curl_easy_cleanup(curl);
75     return ret;76 }
复制代码

 

posted @   G1733  阅读(556)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2018-08-25 Socket编程,SocketServer模块
点击右上角即可分享
微信分享提示