cURL 基础

curl 支持的东西比较多,协议包括常见的 FTP(S),HTTP(S),IMAP(S),LDAP(S),POP3(S),SMTP(S),TELNET,TFTP 等;以及 HTTP PUT/POST,FTP 上传,HTTP 登录认证(Basic,Digest,kerberos 等),proxy。好强大。更详细的“what can curl do” 请点击这里查看。

先学习基础的用法,简单的参数就一笔带过,比较复杂的会在下面说明。

使用 curl 来访问 jaseywang.me,将其结果输入到 jaseywang.html 中:

$ curl jaseywang.me -o jaseywang.html

跟 -o 类似,只不过是直接以默认的文件名来保存文件。下面这个即保存为 Linux 这个文本文件:

$ curl -O http://en.wikipedia.org/wiki/Linux

指明使用的 user-agent,以及 referer:

$ curl -A "Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0" -o about.html -e http://jaseywang.me  http://jaseywang.me/about/

设置连接的超时时间,以及最大的重试次数;让 curl 保持“安静”:

$ curl --connect-timeout 20 -m 10 -s  http://g.cn
加了 -s 之后,就不会显示像下面这个烦人的东西了

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 18671    0 18671    0     0  23186      0 –:–:– –:–:– –:–:– 33222

仅显示 HTTP-header 信息,可以看到是个 302 定向,如果换成 -i 就是包含头部信息:

$ curl -I g.cn

输出由于重定向之后的最终文件:

$ curl -IL g.cn

使用 HTTP proxy 来访问:

$ curl -x proxy_ip:port -L   g.cn

使用 socks proxy 来访问:
    
$ curl  --socks5 proxy_ip:port -L g.cn

cookie 的处理:

$ curl  -D now.txt -b previous.txt www.baidu.com
-D:dump 出当前 url 的 header 信息,包括 cookie;-c 参数是个更好的选择
-b:将 cookie 传回给 server

“批量”下载:

$ curl http://{a,b}.example.com/[1-3].jpg -o "#1_#2.jpg"
上面的这个会生成下面的文件,#1_#2 其实就是变量
a_1.jpg
a_2.jpg
a_3.jpg
b_1.jpg
b_2.jpg
b_3.jpg

将文件分块进行传输:

$ curl -o "1" -r 0-1000000       http://mirrors.163.com/centos/6.2/os/x86_64/images/pxeboot/vmlinuz
$ curl -o "2" -r 1000001-2000000 http://mirrors.163.com/centos/6.2/os/x86_64/images/pxeboot/vmlinuz
$ curl -o "3" -r 2000001-        http://mirrors.163.com/centos/6.2/os/x86_64/images/pxeboot/vmlinuz
$ cat 1 2 3 > vmlinuz

注意:参数 -r 后面的分割数值大小,分割错了 cat 后的文件会有问题

ftp 的下载上传:

$ curl ftp://xxoo.com/file.zip -u user:passwd -O
$ curl -U user:passwd -x proxy_ip:port -u user:passwd ftp://xxoo.com/file.zip
$ curl -u user:passwd -T file.zip ftp://xxoo.com/

测试网站速度,-w 参数后面接需要测试的参数,详细解释男人一下,下面这个会测试下载速度,只下载前 1M 的大小,以 B/s 为单位:

$ curl -r 0-1000000 -L -w %{speed_download} -o/dev/null -s http://mirrors.163.com/centos/6.2/isos/x86_64/CentOS-6.2-x86_64-LiveCD.iso

比上面的稍复杂,颗粒化了需要监控的参数时间:

$ curl -o /dev/null -s -w %{time_namelookup}:%{time_connect}:%{time_starttransfer}:\
> %{time_total}:%{size_download}:%{size_upload}:%{size_header} http://www.baidu.com

-v 比较详细的显示 HTTP 通信的过程,而 –strace 则以 16 进制的方式更详细的输出信息:

$ curl -v http://www.baidu.com
$ curl --trace output.txt http://www.baidu.com

ref:

http://curl.haxx.se/docs/httpscripting.html

  • http://idaemon.net 飞扬

    感觉挺有趣的,可以部分转载么?

    • jaseywang

      注明出处即可。