curl 是一个用来进行HTTP访问的命令(和函数库)。用curl可以模拟浏览器对特定的网站进行通信。
curl 可以为前端开发者提供http测试功能,例如:
查看网页源码
curl 后面跟网址,就可以下载指定网址的页面源码了curl www.sina.com
//结果
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
下载保存网页
curl -o page.html http://www.yahoo.com |
使用代理访问
curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com |
操作cookie
先访问指定网址,将cookie保存到文件中如cookie01.txt
下次访问该网址时,再将cookie添加到请求头中curl -D cookie0001.txt http://www.yahoo.com
curl -D cookie0002.txt -b cookie0001.txt http://www.yahoo.com
网址跳转
上面新浪的网址是 www.sina.com 而当我们打开时,网页会自动跳转到 www.sina.com.cn
使用curl方向可以自动跳转到 www.sina.com.cn 并下载源码curl -L www.sina.com
显示响应头信息
-i
显示响应头信息和body内容,-I
只显示响应头信息curl -i www.sina.com
//结果
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 21 Mar 2016 05:14:26 GMT
Content-Type: text/html
Location: http://www.sina.com.cn/
Expires: Mon, 21 Mar 2016 05:16:26 GMT
Cache-Control: max-age=120
Age: 109
Content-Length: 178
X-Cache: HIT from ctc.nj.1cf2.176.spool.sina.com.cn
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
显示通信过程
-v
参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。curl -v www.sina.com
* Rebuilt URL to: www.sina.com/
* Trying 202.102.75.147...
* Connected to www.sina.com (202.102.75.147) port 80 (#0)
> GET / HTTP/1.1
> Host: www.sina.com
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx
< Date: Mon, 21 Mar 2016 05:18:43 GMT
< Content-Type: text/html
< Location: http://www.sina.com.cn/
< Expires: Mon, 21 Mar 2016 05:20:43 GMT
< Cache-Control: max-age=120
< Age: 50
< Content-Length: 178
< X-Cache: HIT from ctc.nj.1cf2.179.spool.sina.com.cn
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host www.sina.com left intact
查看更详细的通信过程, 并保存至文件curl --trace-ascii output.txt www.sina.com
GET请求
curl 127.0.0.1:8899/index.html?name=jack |
POST请求
添加 --data
或 -D
后面跟传递的参数,再加网址,即可发送POST请求curl -D "name=jack&age=22" 127.0.0.1:8899/post
如果要对数据内容做编码处理,可使用 –data-urlencode 参数curl -D "name=jack jason&age=22" 127.0.0.1:8899/post
文件上传
假定文件上传的表单是下面这样:<form method="POST" enctype='multipart/form-data' action="upload.cgi">
<input type=file name=upload>
<input type=submit name=press value="OK">
</form>
可以用curl这样上传文件:curl --form upload=@localfilename --form press=OK 127.0.0.1:8899/upload
添加 referer 字段
有一些防盗链网站通过请求头中的 referer 信息来判断是否为盗链,curl可以任意修改referer信息
添加参数 --referer
或 -e
给请求头中添加referer信息curl --e http://www.example.com http://www.example.com
添加浏览器信息
有些网站,如淘宝会对用户使用的浏览器做检测适配处理,添加特定的浏览器信息可以模拟真实的浏览器访问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 http://www.yahoo.com
这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的IE6.0
下载文件
添加 -o
或 -O
参数,curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
模拟断点下载
比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载
我们就可以用这样的命令:curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &
curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &
curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &
curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3
这样就可以分块下载啦。
不过你需要自己把这些破碎的文件合并起来
如果你用UNIX或苹果,用 cat zhao.part* > zhao.mp3就可以
如果用的是Windows,用copy /b 来解决
添加本地证书
比如 https的时候使用本地证书,就可以这样curl -E localcert.pem https://remote_server
用curl通过dict协议去查字典
curl dict://dict.org/d:computer |
ftp下载上传
curl -u name:passwd ftp://ip:port/path/file |