分享

c里面使用libcurl库实现发送post并获取post到的内容

 dwlinux_gs 2015-06-26

以下是c代码的实现:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4. #include <curl/curl.h>  
  5.   
  6. #define POSTURL    "http://www.xiami.com/member/login"  
  7. #define POSTFIELDS "email=myemail@163.com&password=mypassword&autologin=1&submit=登 录&type="  
  8. #define FILENAME   "curlposttest.log"  
  9.   
  10. size_t write_data(void* buffer,size_t size,size_t nmemb,void *stream)  
  11. {  
  12.     FILE *fptr = (FILE*)stream;  
  13.     fwrite(buffer,size,nmemb,fptr);  
  14.     return size*nmemb;  
  15. }  
  16.   
  17. int main(int argc,char *argv[])  
  18. {  
  19.     CURL *curl;  
  20.     CURLcode res;  
  21.     FILE* fptr;  
  22.     struct curl_slist *http_header = NULL;  
  23.   
  24.     if ((fptr = fopen(FILENAME,"w")) == NULL)  
  25.     {  
  26.         fprintf(stderr,"fopen file error:%s\n",FILENAME);  
  27.         return -1;  
  28.     }  
  29.   
  30.     curl = curl_easy_init();  
  31.     if (!curl)  
  32.     {  
  33.         fprintf(stderr,"curl init failed\n");  
  34.         return -1;  
  35.     }  
  36.   
  37.     curl_easy_setopt(curl,CURLOPT_URL,POSTURL); //url地址  
  38.     curl_easy_setopt(curl,CURLOPT_POSTFIELDS,POSTFIELDS); //post参数  
  39.     curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data); //对返回的数据进行操作的函数地址  
  40.     curl_easy_setopt(curl,CURLOPT_WRITEDATA,fptr); //这是write_data的第四个参数值  
  41.     curl_easy_setopt(curl,CURLOPT_POST,1); //设置问非0表示本次操作为post  
  42.     curl_easy_setopt(curl,CURLOPT_VERBOSE,1); //打印调试信息  
  43.     curl_easy_setopt(curl,CURLOPT_HEADER,1); //将响应头信息和相应体一起传给write_data  
  44.     curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1); //设置为非0,响应头信息location  
  45.     curl_easy_setopt(curl,CURLOPT_COOKIEFILE,"/Users/zhu/CProjects/curlposttest.cookie");  
  46.   
  47.     res = curl_easy_perform(curl);  
  48.   
  49.     if (res != CURLE_OK)  
  50.     {  
  51.         switch(res)  
  52.         {  
  53.             case CURLE_UNSUPPORTED_PROTOCOL:  
  54.                 fprintf(stderr,"不支持的协议,由URL的头部指定\n");  
  55.             case CURLE_COULDNT_CONNECT:  
  56.                 fprintf(stderr,"不能连接到remote主机或者代理\n");  
  57.             case CURLE_HTTP_RETURNED_ERROR:  
  58.                 fprintf(stderr,"http返回错误\n");  
  59.             case CURLE_READ_ERROR:  
  60.                 fprintf(stderr,"读本地文件错误\n");  
  61.             default:  
  62.                 fprintf(stderr,"返回值:%d\n",res);  
  63.         }  
  64.         return -1;  
  65.     }  
  66.   
  67.     curl_easy_cleanup(curl);  
  68. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多