libcurl学习1_libcurl是什么?

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 三者之间的关系如下图所示
libcurl学习1_libcurl是什么?

2.libcurl的获取

我们想要了解 libcurl 这个库,最直接的资源获取来源当然是官方网站:
curl 官方网站
下载源码
libcurl学习1_libcurl是什么?
libcurl学习1_libcurl是什么?
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

libcurl学习1_libcurl是什么?

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

5.总结

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

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