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/
这是上传文件,其中UPLOAD
和PRESS
需要从表单中解析出来的。
$ curl -T new.mp3 http://xxx/upload.php
-T <file>
表示以PUT方法向服务器提交文件。
[TOP]
$ 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 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]