文章目录

  • curl 下载
  • curl的安装
  • curl的使用(C/C++)
    • curl的easy系列
  • 参考文献

curl 下载

这个直接在官网上使用wget下载就可以:

wget --no-check-certificate https://curl.haxx.se/download/curl-7.80.0.tar.gz

curl的安装

  • 我们解压下载后的安装包:
tar zxvf curl-7.80.0.tar.gz
  • 进入解压后的目录:
cd curl-7.80.0
  • 执行配置文件:
./configure
  • make:
make

注:这一步可能会报如下的错误:select TLS backend(s) or disable TLS with --without-ssl.
我们在执行配置文件的时候,需要加入如下配置项
./configure --with-wolfssl

sudo make test
sudo make install

curl的使用(C/C++)

curl是一个用C语言开发的库,支持很多网络协议,但是主要使用的还是HTTP协议。

curl的接口分为两大类:easy系列和multi系列。其中easy系列是同步调用;multi系列是异步的多线程调用


使用g++编译的时候记得链接curl库: -l curl

curl的easy系列

easy系列去收发HTTP数据的接口函数主要有4个:

  • curl_easy_init
    这个函数原型如下,其会创建一个curl句柄,这个是其他curl函数要用的。
CURL *curl_easy_init(void);
  • curl_easy_setopt
    这个函数原型如下,其会设置各种请求参数,比如请求方法、URL、header/body数据、超时、回调函数等等。
CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
  • curl_easy_perform
    这个函数的原型如下,其用来发送数据,返回的数据由回调函数处理
CURLcode curl_easy_perform(CURL *curl);
  • curl_easy_cleanup:
    这个函数的原型如下,这个函数用来清理句柄相关资源,结束会话。
void curl_easy_cleanup(CURL *curl);

下面是个用来收发数据的简短例子:

int main()
{//创建curl句柄auto curl_fd = curl_easy_init();assert(curl_fd);//设置请求的URLcurl_easy_setopt(curl_fd, CURLOPT_URL, "www.baidu.com");//发送数据auto res = curl_easy_perform(curl_fd);if (res != CURLE_OK){cout << curl_easy_strerror(res) << endl;}curl_easy_cleanup(curl_fd);
}

当然,我们还可以设置回调函数,回调函数的原型如下:

/*** @brief 回调函数** @param recv_data 此次接收到的数据* @param size 此次接收到的字节数* @param nmemb 块数* @param user_buf 出参数据,传出http返回数据,可以用strcat(user_buf,recv_data)收集recv_data的数据。当然用户要定义缓冲区。* @return size_t*/
size_t write_callback(char *recv_data, size_t size, size_t nmemb, void *user_buf);

我们通过curl_easy_setopt绑定一下就好了:

size_t write_callback(char *recv_data, size_t size, size_t nmemb, void *user_buf)
{cout << "size=" << size << endl;cout << "recv_data=" << recv_data << endl;cout << "nmemb=" << nmemb << endl;return size * nmemb; //返回值必须是这个,否则res != CURLE_OK
}int main()
{//创建curl句柄auto curl_fd = curl_easy_init();assert(curl_fd);//设置请求的URLcurl_easy_setopt(curl_fd, CURLOPT_URL, "www.baidu.com");curl_easy_setopt(curl_fd, CURLOPT_WRITEFUNCTION, &write_callback);//发送数据auto res = curl_easy_perform(curl_fd);if (res != CURLE_OK){cout << curl_easy_strerror(res) << endl;}curl_easy_cleanup(curl_fd);
}


write_callback的函数返回值必须为size * nmemb,否则会报错:Failed writing received data to disk/application

参考文献

[1] 罗剑锋.罗剑锋的C++实战笔记.极客时间

Linux上curl的安装和使用相关推荐

  1. JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)

    JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!) 1.文件准备: 服务器:CentOS Linux release 7.3.1611 (Core)     Apa ...

  2. 深度linux安装spotify,如何在 Linux 上使用 snap 安装 Spotify(声破天)

    如何在 Ubuntu Linux 桌面上安装 spotify 来在线听音乐? Spotify 是一个可让你访问大量歌曲的数字音乐流服务.你可以免费收听或者购买订阅,可以创建播放列表.订阅用户可以免广告 ...

  3. 在linux上使用yum安装JDK

    在linux上使用yum安装JDK 2014-05-14 14:36:59 分类: Java 1.查找java相关得列表 [qyf@localhost ~]$ yum -y list java* 执行 ...

  4. Linux上的redis安装和后台启动

    Linux上的redis安装和后台启动 1.环境准备 2.下载与安装 3.前台启动redis服务 4.后台启动redis服务 5.端口6379不同的解决办法 1.环境准备 Redis是用C实现的,需要 ...

  5. linux 自定义安装软件,在/ usr中跟踪Linux上自定义软件安装的最佳实践?

    我正在 Linux上编译和安装软件(在我的案例中是Debian Squeeze).下载,解压缩,安装依赖的开发人员库/标题,运行configure然后make. 到目前为止,所有内容仍保留在源目录中. ...

  6. oracle的安装liunx,linux上oracle简单安装

    当前位置:我的异常网» Linux/Unix » linux上oracle简单安装 linux上oracle简单安装 www.myexceptions.net  网友分享于:2013-07-27  浏 ...

  7. 怎么在Linux上下载并安装ESET NOD32 Antivirus 4桌面版

    转自:怎么在Linux上下载并安装ESET NOD32 Antivirus 4桌面版 下载并安装ESET NOD32 Antivirus 4的Linux桌面版,根据下面的步骤一步一步的来: I.  下 ...

  8. Linux上subversion的安装和使用

    目录 1.Linux上subversion下载... 3 2.Linux上subversion的安装... 6 2.1.查询系统之前安装的旧版本... 6 2.2.yum安装yum源默认版本... 7 ...

  9. Docker在Linux上下载与安装配置

    Docker在Linux上下载与安装配置 官方文档: Redirecting- 1.删除旧版本的docker,防止有残留 sudo yum remove docker \docker-client \ ...

最新文章

  1. 《OpenCV3编程入门》学习笔记5 Core组件进阶(二) ROI区域图像叠加图像混合
  2. 一次打流过程的优化反思(iperf3的灵活运用)
  3. windows10环境下的RabbitMQ安装步骤(图文)
  4. WinCE 开始菜单StartMenu_Create()函数代码分析
  5. Linux下常用日志分析工具
  6. android 8 ril,Android系统启动——8 附录2:相关守护进程简介
  7. C++Tower of Hanoi汉诺塔的实现算法(附完整源码)
  8. PHP如何保存当前用户
  9. MyBatis 问题(持续更新)
  10. vue 2.6 中 slot 的新用法
  11. 嵌入式根文件系统制作
  12. R语言-单一变量分析
  13. from mysql partition select_通过分区(Partition)提升MySQL性能[原创翻译]
  14. 复制粘贴带相关的文字及链接
  15. Android Studio升级到3.0.0后构建项目时出现的问题总结
  16. 快速测试UTF8编码的文件是不是加了BOM,不限PHP
  17. php unset函数 赋值 null来销毁变量
  18. 利用计算机属性将字符串逆序输出,字符串逆序的各种实现算法
  19. Google Gmail十年回首
  20. 一个农村孩子的大城市梦想之深入江湖!

热门文章

  1. Ubuntu安装LaTeX
  2. Hive SQL常用函数
  3. 涂鸦智慧工业解决方案成功入驻亚马逊云科技Marketplace
  4. c语言中 push 函数,C ++ STL中的stack :: push()函数
  5. 如何使用ODX描述诊断会话和安全等级
  6. VS编程,WPF中,通过telerik控件创建颜色选择器,颜色拾取器,调色板的一种方法
  7. MP1655GG-Z
  8. 海量点云数据快速读取方法
  9. Arm云游戏及虚拟化技术沙龙,Arm中国,NVIDIA,腾讯及百度等为你分享超强技术干货...
  10. Siemens_NX2206_8080_20221220(NX2206系列免安装)