cURL syntax

参考:curl.haxx, 强大的网络传输工具,



curl可以解析http response头信息,也可以指定http request头信息,且可处理cookie,具备web浏览器的基本功能。curl还支持HTTPS/FTP/FTPS/TELNET/LDAP等协议。

基本功能

$ curl http://xxx/

打印网页的源代码。

$ curl -o page.html http://xxx/
$ curl -O http://xxx/

保存源代码,-o--output <file>,表示重命名为”page.html”,-O表示以默认的文件名保存。

$ curl -O url1 -O url2 -O url3

同时保存多个网页,curl会自动分析url,尝试重用链接。

$ curl --trace msg.txt http://xxx/

将通信过程保存在msg.txt中。

-i 打印http response头信息和源代码
-I --head,只打印http response头信息
-D <file> 将http response头信息保存为文件
-H 指定http request头信息
-s --silent,不显示传输信息
-v --verbose,显示通信的全部信息,可用于查看http request头信息
-L 使用地址重定向
-C 对未完成而中断的下载进程续传
-m <seconds> --max-time <seconds>,指定超时
--retry <num> 指定重试次数


[TOP]


测试参数

$ curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://xxx/

-w--write-out,用于获取http变量,常用的http变量有:

http_code 返回http状态码
http_connect 最后一次有效连接时的http状态码
local_ip 本地ip
local_port 本地端口
num_connects 连接数
num_redirects 重定向数
redirect_url 重定向地址
remote_ip 远程ip
remote_port 远程端口
time_total 总响应时间,单位是秒,精确到小数点后三位
time_namelookup 域名解析时间
time_connect 连接到目标地址耗费的时间,包括域名解析时间
time_pretransfer 从执行到开始传输的间隔
time_starttransfer 开始传输时间
size_download 下载网页或文件大小
size_header 响应头大小
size_request 请求头大小
speed_download 传输速度
speed_upload 平均上传速度
content_type 下载文件类型


[TOP]


表单数据

对于表单,需要分析表单处理器(action)、表单方法(method)、数据域(name)以及触发器。

$ curl http://url/page.php?NAME1=xxx&NAME2=yyy

以GET方法发送表单信息,?用于分隔网址和GET数据,&用于连接不同数据。

$ curl -d "NAME1=xxx&NAME2=yyy" http://url/page.php

-d--data <data>--data-ascii <data>,指定POST的内容,和GET方法不同,针对POST方法时须把数据和网址分开。

$ curl -d @data.xml http://url/page.php

这是从文件data.xml中获取表单数据,注意文件名前要加@

$ curl -d http://url/page.php

这是通过标准输入提供表单数据。

-F <data>提供和-d类似的功能,如:

$ curl -F "web=@index.html;type=text/html" http://xxx.com/

[TOP]


$ curl -c cookie.txt -d "id=USERNAME&passwd=PASSWD" http://m.newsmth.net/user/login

保存登陆后的cookie信息到cookie.txt中。

$ curl -b cookie.txt http://m.newsmth.net/

使用cookie.txt中保存的cookie信息登陆网站,-b--cookie <name[=data]>,还可以以name=data的形式提交:

$ curl -b "NAME1=VALUE1" http://m.newsmth.net/

先手动登陆某网站,通过一些浏览器工具可以将cookie提取出来,然后使用该cookie就可以访问该网站:

$ curl -H "Cookie: NAME1=VALUE1; NAME2=VALUE2" http://xxx/

使用-D保存的http response头信息中也包含Cookie字段:

$ curl -D header.txt http://xxx/

更多cookie知识,请看这里

[TOP]


模拟客户端

$ curl -A "User Agent" http://xxx/

-A--user-agent,指定http request头信息中的User-Agent字段,用于模拟客户端设备和浏览器信息,如:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36

如需获取这些信息,可到这里或者这里

$ curl -e url_from http://www.newsmth.net/

-e--referer <URL>,指定http request头信息中的Referer字段,表示跳转到当前url的引用网址。

-b-A-e的实质是分别指定http request头信息中的Cookie:..., User-Agengt:..., Referer:...字段,其他的http request字段可以使用-H修改,-H--header <header>,可以多次使用,每次指定一个字段,如:

$ curl -H 'Host:m.newsmth.net' \
-H `Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8` \
-H 'Accept-Encoding:gzip, deflate, sdch' \
-H 'Accept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ja;q=0.2' \
-H 'Cache-Control:max-age=0' \
-H 'Connection:keep-alive' \
-H 'Cookie:tma=******; bfd_g=******; main[UTMPUSERID]=******; main[UTMPKEY]=******; main[UTMPNUM]=******;' \
-H 'Upgrade-Insecure-Requests:1' \
-H 'User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36' \
http://www.newsmth.net

[TOP]


代理服务器

$ curl -x 10.0.0.127:80 http://xxx/

-x--proxy <proxyhost[:port]>,使用代理服务器访问网页,默认端口为1080。这里提供了一些代理IP。

[TOP]


上传文件

$ curl --form "UPLOAD=@FILE" --form "PRESS=OK" http://xxx/

这是上传文件,其中UPLOADPRESS需要从表单中解析出来的。

$ curl -T new.mp3 http://xxx/upload.php

-T <file>表示以PUT方法向服务器提交文件。

[TOP]


FTP操作

$ curl -u USERNAME:PASSWD -O ftp://xxx/

列出xxx下的所有文件夹和文件。

$ curl -u USERNAME:PASSWD -O ftp://xxx/sample.jpg

下载sample.jpg文件。

$ curl -u USERNAME:PASSWD -T sample.txt ftp://xxx/

将sample.txt上传到FTP。

$  curl -u USERNAME:PASSWD -T "{file1,file2}" ftp://xxx/

支持同时上传多个文件。

$ curl -u USERNAME:PASSWD -T - ftp://xxx/xx.txt

从标准输入获取内容上传到服务器指定的文件中。

[TOP]


curl词典

$ curl dict://dict.org/show:db

这是列出所有可用词典。

$ curl dict://dict.org/d:hello

查询单词hello。

$ curl dict://dict.org/d:hello:foldoc

在foldoc词典中查询hello。

[TOP]


其他

如需下载整个网站,可使用wget

$ wget --mirror http://xxx/

关于wget的基本用法,查看这里

[TOP]