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. JavaMVC 模式
  2. 皮一皮:你有没有为中国大数据力量做一份贡献!
  3. 汇编-使用VS2008查看反汇编语言
  4. BZOJ-2705-Longge的游戏-SDOI2012-欧拉函数
  5. MongoDB学习3——mongoDB的一些基本使用
  6. Mr.J-- jQuery学习笔记(五)--属性及属性节点
  7. SpringBoot整合kafka之kafka分区实战
  8. wow修改人物模型_一张照片生成人物动画!三星最新AI研究成果出炉
  9. esp32 micropython 加密_ESP32 MicroPython教程:使用SHA-256
  10. 对缓存的思考——提高命中率
  11. Word 重新设置页码
  12. python实现决策树ID3算法
  13. Unity3D手机斗地主游戏开发实战(04)_出牌判断大小
  14. Open Policy Agent(OPA) rego使用
  15. 正则表达式,去除空格标点下划线等
  16. 安装oh my zsh
  17. JAVA面试题(选择题)
  18. 实现pdf文件打印预览
  19. 多图上传以及多图排序的方法及流程详解
  20. web应用越权问题的三个解决思路

热门文章

  1. 需求用例分析之九:序列图
  2. 2、Mysql 8.0.20最新版本修改密码
  3. python123期末测试第十周答案_Python语言设计_章节测验,期末考试,慕课答案查询公众号...
  4. 一起教育科技携手神策数据,数据赋能智能教育新时代
  5. 神策数据荣膺“2017 年度最受欢迎企业服务商 Top 10”
  6. ubuntu14.04禁用USB外存储设备
  7. SpringBoot集成Mybatis(0配置注解版)
  8. CSDP是个好东西——CSDP 认证考试简介
  9. 菜鸟学Linux 第052篇笔记 httpd-install and section2
  10. springMVC 不扫描 controller 中的方法