- 论坛徽章:
- 0
|
本帖最后由 雨过白鹭洲 于 2011-10-14 16:47 编辑
CU源码阅读2: curl总体了解
虽然咱们要做的是源码阅读,但是我个人在阅读开源项目的代码时,一般不会直接就钻进代码深处去研究,而是按下面步骤来:
1. 首先看看相关的文档,对项目有个大致了解
2. 编译运行程序,输入各种参数来了解程序的使用
3. 梳理整个项目的目录、源码结构,并大致了解各个目录和文件的作用
4. 找到main函数,开始跟着程序的流程快速地走一遍
5. 深入地分析、理解代码,并对自己感兴趣,或者需要解决问题的地方重点关注
-------------------------------------------华丽的分隔线-------------------------------------------
老实说,我并没有用过curl这个工具,在我需要下载的时候,通常都是交给迅雷不及掩耳盗铃这个强大而又流氓的软件来完成,当然这是在windows下。当我在Linux下需要下载东西时,通常都是直接使用Chrome的下载功能,偶尔还用过wget这个东东,不过总体来说,速度是没法跟迅雷相提并论的。
libcurl库是curl工具的核心,而对于广泛使用的libcurl库,我也从来没有在自己的项目中使用过。究其原因,主要是我水平不行,没有写过什么大型的网络项目。
因此,我自身的开发水平,特别是网络编程方面,无论是开发功底还是开发经验,其实都不是很强的。要分析透curl和libcurl,恐怕不是一件容易的事情,很多方面也不可能分析得特别深入。不过我倒是希望这一路分析下来,也能够让我在网络编程方面能够进步一些。
-------------------------------------------华丽的分隔线-------------------------------------------
好吧,废话不多说,下面就让我们来看看从curl网站上的文档中能够获取到什么有用的信息
我们使用和分析的是curl 7.22.0稳定版本,curl的全名是"Client for URLs",也就是URL客户端。curl项目实际上由curl命令行工具、和libcurl库组成。
下面是网站上的官方解释:
[curl]
curl是一个命令行工具,用于传输URL数据。支持的协议包括DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET, TFTP。
curl支持SSL证书、HTTP POST、HTTP PUT、FTP上传、HTTP基于form的上传、代理、cookies、用户+密码验证(基础、摘要、NTLM、Negotiate、kerberos等等)、文件重传、代理隧道,和其它很多有用的功能。
[libcurl]
libcurl是一个易于使用的客户端URL传输库。支持DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP等协议。
libcurl也支持SSL证书、HTTP POST、HTTP PUT、FTP上传、HTTP基于form的上传、代理、cookies、用户+密码验证(基础、摘要、NTLM、Negotiate、kerberos等等)、文件重传、代理隧道,和其它很多有用的功能
libcurl高度可移植,支持的平台包括:Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS, Symbian, OSF, Android, Minix, IBM TPF等等。
libcurl免费自由、线程安全、兼容IPv6、特性丰富、快速、社区支持
这里可以看到curl和其它下载工具的特性对比:
http://curl.haxx.se/docs/comparison-table.html
-------------------------------------------华丽的分隔线-------------------------------------------
下面我们来配置和编译curl 7.22.0
curl的配置项太多,一下子咱也看不过来,先不管那么多了,只把调试功能开启就拉倒了。
标准的三步曲:
./configure --enable-debug --disable-optimize --enable-curldebug
make
make install
默认安装到/usr/local/bin/curl
curl命令的基本用法:
curl [options] [URL...]
选项和参数是可选的,但是至少要提供一个URL,当然也可以同时指定多个
为了感受一下curl的复杂度,你还是自己运行一下
./curl --help
看看curl吓人的参数和选项
-------------------------------------------华丽的分隔线-------------------------------------------
好,下面我们来体验一下curl的使用
获得netscape web服务器的主页内容,直接打印输出
curl http://www.netscape.com/
来个ftp文件,也是直接输出
curl ftp://ftp.funet.fi/README
试试IPv6
curl -g "http://[2001:1890:1112:1::20]/"
下载到文件
curl -o thatpage.html http://www.netscape.com/
curl -O www.haxx.se/index.html -O curl.haxx.se/download.html
使用用户和密码下载ftp
curl ftp://name:passwd@machine.domain:port/full/path/to/file
curl -u name:passwd ftp://machine.domain:port/full/path/to/file
代理
curl -x my-proxy:888 ftp://ftp.leachsite.com/README
HTTP字节范围
curl -r 0-99 http://www.get.this/
curl -r -500 http://www.get.this/
上传
curl -T - ftp://ftp.upload.com/myfile
curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile
curl -T uploadfile -u user:passwd ftp://ftp.upload.com/
curl -T localfile -a ftp://ftp.upload.com/remotefile
详细输出/调试
curl -v ftp://ftp.upload.com/
curl --trace trace.txt www.haxx.se
还有好多好多用法,今天就先到这里吧。等咱们分析到具体的功能时,再使用命令和参数来体验
-------------------------------------------华丽的分隔线-------------------------------------------
下一篇我们将查看curl项目的目录结构,以及主要目录和文件的作用。 |
评分
-
查看全部评分
|