免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3999 | 回复: 4

libcurl的第一个例子是不是有问题 [复制链接]

论坛徽章:
0
发表于 2012-06-26 11:09 |显示全部楼层
就是那个simple.c,代码如下:
  1. #include <stdio.h>
  2. #include <curl/curl.h>

  3. int main(void)
  4. {
  5.   CURL *curl;
  6.   CURLcode res;

  7.   curl = curl_easy_init();
  8.   if(curl) {
  9.     curl_easy_setopt(curl, CURLOPT_URL, "http://www.163.com");
  10.     res = curl_easy_perform(curl);

  11.     /* always cleanup */
  12.     curl_easy_cleanup(curl);
  13.   }
  14.   return 0;
  15. }
复制代码
simple.c shows how to get a remote web page in only four libcurl function calls.
simple.c 这个例子告诉你,仅仅需要4个libcurl函数,就能获取一个网页。

执行没有任何结果,必须写成回调的方式,才能打印输出,按照文档里说的,这个例子似乎会输出到stdout的。
文档libcurl-tutorial - libcurl programming tutorial 里有如下一段:
libcurl offers its own default internal callback that will take care of the data if you don't set the callback with CURLOPT_WRITEFUNCTION. It will then simply output the received data to stdout. You can have the default callback write the data to a different file handle by passing a 'FILE *' to a file opened for writing with the CURLOPT_WRITEDATA option.

以下是回调的写法:
  1. #include <stdio.h>
  2. #include <curl/curl.h>

  3. size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp)
  4. {
  5.     printf("%s",(char*)buffer);
  6.    
  7.     return size*nmemb;
  8. }

  9. int main(void)
  10. {
  11.   CURL *curl;
  12.   CURLcode res;
  13.   char buf[2048] = {0};
  14.   
  15.   curl_global_init(CURL_GLOBAL_DEFAULT);
  16.   curl = curl_easy_init();
  17.   
  18.   if(curl) {
  19.     curl_easy_setopt(curl, CURLOPT_URL, "http://www.163.com");
  20.       
  21.     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
  22.   
  23.     // curl_easy_setopt
  24.     res = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
  25.     if(res != CURLE_OK){
  26.         printf("curl_easy_setopt not return CURLE_OK\n");
  27.     }
  28.     else{
  29.         printf("curl_easy_setopt exec success\n");
  30.     }
  31.    
  32.     // curl_easy_setopt
  33.    
  34. //   curl_easy_setopt(curl, CURLOPT_WRITEDATA, buf);

  35.     // curl_easy_perform
  36.     res = curl_easy_perform(curl);
  37.     if(res != CURLE_OK){
  38.         printf("curl_easy_perform not return CURLE_OK\n");
  39.     }
  40.     else{
  41.         printf("curl_easy_perform exec success\n");
  42.     }

  43. //   printf("buf:%s\n", buf);
  44.    
  45.     /* always cleanup */
  46.     curl_easy_cleanup(curl);
  47.   }
  48.   return 0;
  49. }
复制代码

论坛徽章:
0
发表于 2012-06-26 11:37 |显示全部楼层
没研究过这个库,不知道问题所在。

论坛徽章:
26
处女座
日期:2016-04-18 14:00:4515-16赛季CBA联赛之深圳
日期:2020-06-02 10:10:5015-16赛季CBA联赛之广夏
日期:2019-07-23 16:59:452016科比退役纪念章
日期:2019-06-26 16:59:1315-16赛季CBA联赛之天津
日期:2019-05-28 14:25:1915-16赛季CBA联赛之青岛
日期:2019-05-16 10:14:082016科比退役纪念章
日期:2019-01-11 14:44:062016科比退役纪念章
日期:2018-07-18 16:17:4015-16赛季CBA联赛之上海
日期:2017-08-22 18:18:5515-16赛季CBA联赛之江苏
日期:2017-08-04 17:00:4715-16赛季CBA联赛之佛山
日期:2017-02-20 18:21:1315-16赛季CBA联赛之天津
日期:2016-12-12 10:44:23
发表于 2012-06-26 12:31 |显示全部楼层
是这样的,curl 库都是使用回调函数来处理数据的,你要自己定义回调函数

论坛徽章:
0
发表于 2012-06-26 12:55 |显示全部楼层
回复 3# evaspring


    明白,我已经弄好了,

感觉文档不准确,浪费了我的时间。

论坛徽章:
0
发表于 2012-06-26 14:56 |显示全部楼层
我错了,看来是因为我对http协议不了解,因为163那个主页设置了跳转。
所以后来加了句curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);才行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP