2019独角兽企业重金招聘Python工程师标准>>>

安装:

$ sudo apt-get install libcurl3
$ sudo apt-get install libcurl4-openssl-dev

示例

来自 http://stackoverflow.com/questions/13905774/in-c-how-do-you-use-libcurl-to-read-a-http-response-into-a-string :

#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>struct url_data {size_t size;char* data;
};size_t write_data(void *ptr, size_t size, size_t nmemb, struct url_data *data) {size_t index = data->size;size_t n = (size * nmemb);char* tmp;data->size += (size * nmemb);#ifdef DEBUGfprintf(stderr, "data at %p size=%ld nmemb=%ld\n", ptr, size, nmemb);
#endiftmp = (char*)realloc(data->data, data->size + 1); /* +1 for '\0' */if(tmp) {data->data = tmp;} else {if(data->data) {free(data->data);}fprintf(stderr, "Failed to allocate memory.\n");return 0;}memcpy((data->data + index), ptr, n);data->data[data->size] = '\0';return size * nmemb;
}char *handle_url(char* url) {CURL *curl;struct url_data data;data.size = 0;data.data = (char*)malloc(4096); /* reasonable size initial buffer */if(NULL == data.data) {fprintf(stderr, "Failed to allocate memory.\n");return NULL;}data.data[0] = '\0';CURLcode res;curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);res = curl_easy_perform(curl);if(res != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));}curl_easy_cleanup(curl);}return data.data;
}int main(int argc, char* argv[]) {char* data;if(argc < 2) {fprintf(stderr, "Must provide URL to fetch.\n");return 1;}data = handle_url(argv[1]);if(data) {printf("%s\n", data);free(data);}curl_global_cleanup();return 0;
}

编译、运行:

$ gcc -g test.c  -lcurl
$ ./a.out www.baidu.com

示例 (多线程)

#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
#include <thread>struct url_data {size_t size;char* data;
};size_t write_data(void *ptr, size_t size, size_t nmemb, struct url_data *data) {size_t index = data->size;size_t n = (size * nmemb);char* tmp;data->size += (size * nmemb);#ifdef DEBUGfprintf(stderr, "data at %p size=%ld nmemb=%ld\n", ptr, size, nmemb);
#endiftmp = (char*)realloc(data->data, data->size + 1); /* +1 for '\0' */if(tmp) {data->data = tmp;} else {if(data->data) {free(data->data);}fprintf(stderr, "Failed to allocate memory.\n");return 0;}memcpy((data->data + index), ptr, n);data->data[data->size] = '\0';return size * nmemb;
}char *handle_url(char* url) {CURL *curl;struct url_data data;data.size = 0;data.data = (char*)malloc(4096); /* reasonable size initial buffer */if(NULL == data.data) {fprintf(stderr, "Failed to allocate memory.\n");return NULL;}data.data[0] = '\0';CURLcode res;curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);res = curl_easy_perform(curl);if(res != CURLE_OK) {fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));}curl_easy_cleanup(curl);}return data.data;
}void threadFunc() {char *url = "www.baidu.com";char* data;data = handle_url(url);if(data) {printf("%s\n", data);free(data);}}int main(int argc, char* argv[]) {for(int i=0; i<10000; ++i){std::thread *t = new std::thread(threadFunc);t->join();delete t;}curl_global_cleanup();return 0;
}
g++ -std=c++11  test.cpp  -lcurl -pthread

C++版本

有一个封装的库: https://github.com/jpbarrette/curlpp

转载于:https://my.oschina.net/letiantian/blog/754592

C/C++: libcurl获取网页内容相关推荐

  1. php get 返回源码,php源码 fsockopen获取网页内容实例详解

    PHP fsockopen函数说明: Open Internet or Unix domain socket connection(打开套接字链接) Initiates a socket connec ...

  2. 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用

    最近经常需要下载一些东西,而这个下载地址又会经过层层跳转,每个页面上都有很多广告,烦不胜烦,所以做了一个一键获得最终下载地址的小工具.使用C#,来获取网页内容,然后通过HtmlAgilityPack获 ...

  3. php 获取网页内容 四种方法

    <?php     //获取网页内容     //方法一     // $content = file_get_contents("http://bbs.zj.com");/ ...

  4. C#获取网页内容的三种方式

    搜索网络,发现C#通常有三种方法获取网页内容,使用WebClient.WebBrowser或者HttpWebRequest/HttpWebResponse...方法一:使用WebClient (引用自 ...

  5. VC++中使用使用winnet类获取网页内容

    2005-09-01 VC++中使用使用winnet类获取网页内容 - [VC专栏] 微软提供的Winnet类是一个应用层的网络通信组件, 它可以使你的应用程序很容易的实现http.ftp.gophe ...

  6. vbs获取html内容,VBS获取网页内容

    VBS获取网页内容 2011年03月14日 功能:通过VBS获取远程网页的内容,并提取其中需要的部分(示例中提取股票信息) 以下为代码: 测试VBS获取网页内容 //如果提示权限问题可以设置IE选项, ...

  7. C语言 获取网页内容

    参考来源:https://blog.csdn.net/xiahn1a/article/details/41680959 vc6 上编译通过 #include <winsock.h> #in ...

  8. php获取另一个网页内容,php获取网页内容的三种方法

    本文介绍下,php实现获取网页内容的三种方法,有需要的朋友,参考下吧. 用php代码实现获取网页的原理: 将抓取内容,通过正则表达式过滤,得到想要的内容. 关于正则表达式的内容,程序员之家介绍了很多, ...

  9. php 抓取网站,php 获取网页内容的四种方法

    1,使用xmlhttp对象,类似asp中的ActiveXObject对象. 代码: //获取网页内容 $xhr = new COM("MSXML2.XMLHTTP"); $xhr- ...

最新文章

  1. iOS NSObject对象内存大小
  2. 【转】linux之pmap命令!
  3. mysql导出单表数据
  4. linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
  5. 作者:周武柏,男,美国佛罗里达国际大学计算机科学博士生,南京邮电大学计算机学院大数据项目组成员。...
  6. 优秀的功能测试也可以胜任技术测试者的工资
  7. android异步任务更新进度条,Android的AsyncTask异步任务浅析
  8. 使用spring session+redis技术,解决负载均衡下的session共享问题
  9. java 字符串拼接_不能用 + 拼接字符串? 这次我要吊打面试官!
  10. mac下安装win7虚拟机
  11. 服务器系统怎么设置从光盘启动,电脑BIOS怎么设置光盘启动 三种类型BIOS设置光驱启动的图文详解教程...
  12. initializing of server in progress as process 4656
  13. Linux进程间关系之终端与终端登录
  14. 企业智慧屏后 不止华为望向了智能办公市场
  15. 高等数学笔记-苏德矿-第九章-重积分(Ⅱ)-三重积分
  16. 【超好懂的比赛题解】2020ICPC澳门站 个人题解
  17. 验证码输入错误怎么再次刷新验证码
  18. 通道(channel)
  19. HTML中form表单的应用
  20. centos8 批量修改文件名字

热门文章

  1. Atom 实用侧边栏插件
  2. Python的GUI的最终选择Tkinter的初体验
  3. 对象创建的过程细节是怎样的?一起来探讨内存变化细节
  4. IT项目管理总结:第三章 项目管理过程组
  5. 神策数据《2022 中国企业数字化运营成熟度报告》发布
  6. 神策数据王磊:如何用 JS 实现页面录制与回放
  7. 华农保险 × 神策数据 OpenDay:保险如何从 0 到 1 落地数字化转型?
  8. (转)MySQL索引原理及慢查询优化
  9. ERROR 1436 (HY000) at line 1943
  10. Vim技能修炼教程(16) - 浮点数计算函数