1.libcurl是什么?

可能对于新人来说,就连 cURL、libcurl 和 curl 的概念都是分不清楚的。这不怪我们,确实关于这一点,官方网站都没有说的很清楚,但是在源代码中的 FAQ 文档中却说的非常明白。

What is cURL? cURL is the name of the project. The name is a play on
‘Client for URLs’, originally with URL spelled in uppercase to make it
obvious it deals with URLs. The fact ti can also be pronounced ‘see
URL’ alse helped, it works as an abbreviation for “Client URL Request
Library” or why not the recursive version: “Curl URL Request Library”.

简而言之,cURL 是一个项目的名称。是 Client for URLs、see URL、Client URL Request Library 或者 Curl URL Request Library 的缩写,也就是一个客户端 URL 请求库的项目。

那么什么是 libcurl 呢?

The cURL project produces two products:
libcurl
A free and easy-to-use client-side URL transfer library.

curl
A command line tool for getting or sending files using URL syntax.

上面这段话很清晰的表现出了 cURL 与 libcurl 以及 curl 的关系,也就是说:

cURL 这个项目包含了 libcurl 和 curl 两个产品。
其中,libcurl 是一个客户端的 URL 支持库;而 curl 就是一个使用了 libcurl 库写出来的命令行工具,其可以使用 URL 标识来请求或者发送文件。

也就是说,如果我们想要编写代码来控制有关网络的行为的话,我们就需要使用到 libcurl 库而不是 curl 命令行工具;而如果我们想要直接调用 curl 命令行工具来完成一些操作,比如将其嵌入到脚本代码中去,那么这个时候,我们才会用到 curl 命令行工具。

其中 cURL、libcurl 以及 curl 三者之间的关系如下图所示

2.libcurl的获取

我们想要了解 libcurl 这个库,最直接的资源获取来源当然是官方网站:
curl 官方网站
下载源码


libcurl的构建方式采用config配置,make编译,make install方式安装.
简单的说几个:

  1. docs 文件夹
    这里面有丰富的说明文档以及 libcurl 的运行示例代码。
    有关 cURL、libcurl 以及 curl 的概念的定义,就是在这个文件夹下的 FAQ 文件里面。后面将要讲述的在 Unix 下编译使用 libcurl 库的内容,也是来源于这个文件夹下的 INSTALL.md 文件。除此之外,这个文件夹下还有很多说明文档,有待大家去探索去发现去思考去使用。
    这个文件夹下的 examples 文件夹下,有着丰富的示例代码,其中的 https.c 就是本篇博客的测试运行代码。

  2. winbuild 文件夹
    这个文件夹介绍了如何使用 Visual Studio 编译 libcurl 的方法。基于 Windows 环境的编译与使用就是参考的这个文件夹下的 BUILD.WINDOWS.txt 文件中的内容。
    并且这个文件夹下提供了编译的配置信息文件,大大方便了我们在 Windows 下使用 Visual Studio 编译 libcurl 的工作。

  3. configure
    这个脚本文件用于在 Unix 下配置 libcurl 的安装信息,用来之后安装 libcurl 环境使用。

等等等等,curl 的源代码文件中,包含了很多很多东西。有很多你可能接触不到,我们可以在学习中在使用中慢慢去发掘去使用。

3.libcurl在ubuntu下的安装

让我们步入正题吧,libcurl 在 Unix 环境下怎么编译与使用呢?

这个问题在 curl-7.61.0\docs 下的 INSTALL.md 文件中讲述的非常清晰:

A normal Unix installation is made in three or four steps (after
you’ve unpacked the source archive): ./configure make make test
(optional) make install

也就是说,在类 Unix 环境下,我们都可以在源代码文件目录下使用以下四句指令完成 libcurl 库的安装与编译:

$ ./configure
$ make
$ make test (optional)
$ make install

其中第三步,也就是测试那步是非常耗时间的,为了节约时间可以省略。
另外第四步,可能会涉及到权限问题,如果出现这个问题,需要切换到 root 权限安装。

4.libcurl在ubuntu下的使用

查看版本信息

$ ./curl --version
$ ./curl-config --version

查看库的相关头文件与库文件所在地方

$ curl-config --cflags
$ curl-config --libs

docs 目录下的 examples 文件夹测试用例使用
让我们点开源代码 docs 目录下的 examples 文件夹,其中的 README 文件详细介绍了 libcurl 示例代码的使用方式:

Most examples should build fine using a command line like this:
$curl-config --cc --cflags --libs -o example example.c
Some compilers don’t like having the arguments in this order but instead want you do
reorganize them like:
$ curl-config --cc -o example example.c curl-config --cflags --libs

也就是说,只要我们在上一步中成功安装了 curl 以及 curl-config 工具,在这一步中,我们只需要简单的运行这行指令即可自动的指定代码的包含头文件以及库文件信息:

$ curl-config --cc -o example example.c curl-config --cflags --libs

让我们来尝试下 examples 中的 https.c 文件的编译(因为 https.c 文件可以在源代码中看到,这里就不再详细展示文件内容):

$ curl-config --cc -o https https.c curl-config --cflags --libs

可见,https.c 的运行是非常成功的,成功返回了获取的 html 信息。

5.总结

学习 libcurl 库的最好方法,就是先看官方网站,然后顺着官方网站的介绍下载源代码,最后通过编译源代码运行示例代码去掌握 libcurl 库的使用方法。

libcurl 库的学习还要继续 ~~~
学习链接1.初识libcurl
学习链接2.深入libcurl

libcurl学习1_libcurl是什么?相关推荐

  1. C/C++编程:libcurl学习(linux + cmake windows10 + vs2019)

    curl与libcurl的关系 cURL是项目的名称.该名称是" URL的客户端"上的一个名称,最初是用大写的URL拼写的,以使其明显地处理URL cURL项目产生两种产品: li ...

  2. 开源项目(库)之libcurl学习(一)

    最近抽了点时间,将之前开发中使用到的一些开源库进行了下总结,主要是为了回顾一下自己所使用的一些库基础知识,并且加深理解,在这些库中,首先一个库就是libcurl,这个库很强大,当时在做openstac ...

  3. libcurl linux 静态链接库_Linux学习:Makefile 模板(动态库、静态库、可执行程序)...

    1.编译动态库 ############################################################# # Makefile for shared library. ...

  4. (0012) iOS 开发之MAC 终端命令学习

    Mac 下经常使用终端命令行,看上去很高大上的感觉.自己对终端命令行不是很熟悉.所以下决心学习它.于是就记下自己使用的命令行!以备忘记时查阅. 用 Tab 键可以自动补齐 0. ctrl + umac ...

  5. Elasticsearch-PHP学习

    一.前言 身为一个phper,要学习ES还是有点难度的,毕竟是基于Java写的,不过这也难不倒我们的php大佬,一个ES-PHP插件横空出世,赶紧学习一波~ 二.正文 1. ES-PHP-sdk的手册 ...

  6. 游戏程序员的学习资料

    为什么80%的码农都做不了架构师?>>>    三维图形学:  搞三维图形学首先还是要扎扎实实的先看解析几何.线性代数.计算几何的教材,后面的习题一个都不能少.国内数学书还是蛮好的. ...

  7. python爬虫库的功能_Python学习爬虫掌握的库资料大全和框架的选择的分析

    学Python,想必大家都是从爬虫开始的吧.毕竟网上类似的资源很丰富,开源项目也非常多. Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 当我们在浏览器中输入一个url后回车,后台会发生 ...

  8. [Python学习]PycURL简单学习 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …...

    [Python学习]PycURL简单学习 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Python学习] ...

  9. Using libcurl in VC++

    curl是瑞典curl组织开发的,Official Website: Introduction curl是一个基于命令行的应用工具,提供利用URL标准进行文件传输的功能. 目前已经支持非常多的流行的互 ...

最新文章

  1. 多线程信号量PV操作初探
  2. jbehave_使用JBehave,Gradle和Jenkins的行为驱动开发(BDD)
  3. [算法导论]练习16.1-4 活动教室分配(区间着色问题)
  4. 如何玩转CSS链接(link)知识点?
  5. 设计模式——中介者模式
  6. SRAM和SDRAM的区别
  7. pdf.js跨域加载文件
  8. iPhone升级系统卡在进度条界面怎么办?
  9. 由内而外全面进化,影像娱乐都出彩,vivo S12 Pro上手
  10. 重装系统后计算机无法联网,韩博士重装系统后电脑无法上网怎么办?
  11. Nagios如何配置告警短信?
  12. JS,Jquery发起ajax的方式总结
  13. 前端js html转换成pdf可下载打印;前端js可批量生成条形码;前端js可批量生成二维码,生成letter标签
  14. 论文阅读笔记-Gated relational stacked denoising autoencoder with localized author embedding for
  15. 朴素贝叶斯算法新闻文本分类
  16. 下拉列表(select标签)
  17. 怎么用手机修改服务器的网关,网关,详细教您手机怎么改网关和IP
  18. 已解决:出现了自己签名的证书。 错误: 证书通用名 “www.doctorcom.com” 与所要求的主机名 “raw.githubusercontent.com” 不符。
  19. cie规定的标准光源_标准光源介绍
  20. 使用函数sample进行抽样

热门文章

  1. ChatGPT给程序员人手一个,这很朋克(由ChatGPT编写)
  2. react给Input绑定onChange事件
  3. borland终于把delphi卖掉了
  4. 为什么python语言这么流行,python的工作前景怎么样?
  5. 补气健脾祛湿的食材有哪些?
  6. 性格决定命运,习惯决定未来
  7. Django使用Channels主动给客户端发送信息
  8. 2020-12-17 Scopus文献检索 TargetDetection|Dim|Infrared Image
  9. 语音播报——用setTimeout实现轮询调用接口并播报语音功能
  10. 魅族MAX4 pro 手机无声音