1) curl URL
回车之后,URL的http结果会打印在屏幕上
2) 如果想存储http结果,用curl的内置option就好,用这个option: -o
curl -o page.html url
屏幕上会出现一个下载页面进度指示,等进展到100%下载完成。
3) 如果需要通过代理访问,使用option:-x可以指定http访问所使用的proxy服务器及其端口:
curl -x 123.45.67.89:1080 -o page.html URL
4) 如果需要存储cookie信息,使用option: -D
curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt URL
当页面被存到page.html的同时,cookie信息也被存到了cookie0001.txt里面了。
5) 如果想使用上次留下的cookie信息,则需要把上次的cookie信息追加到http request中去,使用option:-b
curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt url
这样就可以模拟几乎所有的访问网页操作了。
6) 有些网站要求我们使用固定的浏览器进行访问,使用curl同样可以模拟,只需要把浏览器信息加入http request中即可,使用option:-A,
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt URL
这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的IE6.0
而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"则可以服务端Linux上的Netscape 4.73。
7) 有些网站做了防盗链的处理,就是检查http访问的referer,如果和设定不匹配则不允许访问。curl提供了设定referer的option: -e
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "www.baidu.com" -o page.html -D cookie0001.txt URL
这样就是告诉服务器,你是从百度点击某个链接过来的
8) 使用option:-o可以下载文件,同时使用option:-O也可以下载,并按照服务器上的名字自动保存到本地 curl -O http://.../test.JPG
-O支持正则表达式,curl -O http://.../test [1-10].JPG,可以下载test1.JPG….test10.JPG
下面的写法:curl -O #2_#1.jpg http://.../~{1,2}/test [1-10].JPG 可以下载~1、~2下的1-10的文件并且命名为test1_~1.jpg,test1_~2.jpg。#2、#1 是变量,指的是{1,2}的部分,以避免文件名重复。
9) curl支持分模块下载和断点续传
比如我们有一个http://.../~zzh/test.mp3 要下载
可以用这样的命令:
curl -r 0-10240 -o "test.part1" http:/…/~zzh/ test.mp3 &\
curl -r 10241-20480 -o "test.part2" http:/…/~zzh/ test.mp3 &\
curl -r 20481-40960 -o "test.part3" http:/…/~zzh/ test.mp3 &\
curl -r 40961- -o "test.part4" http:/…/~zzh/ test.mp3
这样完成分块下载,然后再把这些文件合并起来
如果你用UNIX或苹果,用 cat test.part* test.mp3就可以;如果用的是Windows,用copy /b 来解决。
上面讲的都是http协议的下载,其实ftp也一样可以用。
curl -u name:passwd ftp://ip:port/path/file
或者curl ftp://name:passwd@ip:port/path/file
10) 说完下载,接下来是上传,上传的option是 -T
向ftp传一个文件: curl -T localfile -u name:passwd ftp://upload_site:port/path/
向http服务器上传文件:curl -T localfile http://.../~zzh/abc.cgi
注意,这时候使用的协议是HTTP的PUT method.
http提交一个表单,比较常用的是POST模式和GET模式
GET模式什么option都不用,只需要把变量写在url里面就可以了
比如:curl http://www.waynerQiu.com/login.cgi?user=nickwolfe&password=12345
而POST模式的option则是 -d
比如,curl -d "user=nickwolfe&password=12345" http://www.waynerQiu.com/login.cgi
就相当于向这个站点发出一次登陆申请;
到底该用GET模式还是POST模式,要看对面服务器的程序设定。
一点需要注意的是,POST模式的文件上传,比如
这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法:
curl -F upload=@localfile -F nick=go http://.../~zzh/up_file.cgi
11) https的时候使用本地证书,可以使用option:-E
curl -E localcert.pem https://remote_server