日期:2014-05-16  浏览次数:21020 次

linux 下访问 URL的命令curl---命令行浏览器

?

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模式的文件上传,比如

<form method="POST" enctype="multipar/form-data"?

action="http://... /~zzh/up_file.cgi">

<input type=file name=upload>

<input type=submit name=nick value="go">

</form>

这样一个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