curl(CommandLine Uniform Resource Locator),即在命令行中利用URL进行数据或者文件传输。
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。
它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
语法: # curl [option] [url]
参数含义
-X 指定请求方法
-x 指定HTTP请求的代理
-H 指定请求标头
-d 发送POST请求提交的数据,使用-d参数后,会自动将请求转为POST,HTTP请求会自动加上标头Content-Type : application/x-www-form-urlencoded,可省略-X POST
-v 显示http通信的整个过程
-u 设置服务器认证的用户名和密码
-i 显示Response头信息,并打印源码
-I 显示Response头信息,不打印源码
-s 不输出错误和进度信息
-S 指定只输出错误信息
-L 自动跳转,curl默认不跟随跳转
-k 跳过SSL检测
-o 文件名 保存
-O 将URL的最后部分当作文件名保存
1. 获取网页文本信息
# 不加参数时,默认发出GET请求,查看页面源码
curl http://www.baidu.com
2. 显示 HTTP 头
curl -I http://www.baidu.com
# 访问服务接口,观察是否连通
curl -i http://127.0.0.1:8099/status
3. 下载文件(将链接保存到文件)
curl -o index.html http://www.baidu.com
curl http://www.baidu.com > index.html
4. 使用 -A 自定义 User-Agent
伪装成安卓火狐浏览器对网页进行请求:
curl -A "Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0" http://www.baidu.com
5. 使用 -H 自定义 header
curl -H "Referer: www.example.com" -H "User-Agent: Custom-User-Agent" http://www.baidu.com
可使用 -H
来自定义 User-Agent 时,需要使用 "User-Agent: xxx
" 的格式。
可以直接在 header 中传递 Cookie:
curl -H "Cookie: JSESSIONID=D0112A5063D938586B659EF8F939BE24" http://www.example.com
6. 使用 -c 保存 Cookie
cURL 访问页面的时候,默认是不会保存 Cookie 的。有些情况下希望保存 Cookie 以便下次访问时使用。
例如登陆了某个网站,希望再次访问该网站时保持登陆的状态,这时就可以现将登陆时的 Cookie 保存起来,下次访问时再读取。
-c
后面跟上要保存的文件名。
curl -c "cookie-example" http://www.example.com
7. 使用 -b 读取 Cookie
前面讲到了使用 -H
来发送 Cookie 的方法,这种方式是直接将 Cookie 字符串写在命令中。如果使用 -b 来自定义 Cookie,命令如下:
1 |
|
如果要从文件中读取 Cookie,-H 就无能为力了,此时可以使用 -b
来达到这一目的:
1 |
|
即 -b
后面既可以是 Cookie 字符串,也可以是保存了 Cookie 的文件名。
8. 使用 -d 发送 POST 请求
我们以登陆网页为例来进行说明使用 cURL 发送 POST 请求的方法。
假设有一个登录页面 www.example.com/login,只需要提交用户名和密码便可登录。
我们可以使用 cURL 来完成这一 POST 请求,-d 用于指定发送的数据,-X 用于指定发送数据的方式:
curl -d "userName=tom&passwd=123456" -X POST http://www.example.com/login
curl -X POST --header"Content-Type:application/json" --data ‘{}’ url (使用post模拟json格式请求接口)
使用GET请求
curl -d "somedata" -X GET http://www.example.com/api
从文件中读取 data
curl -d "@data.txt" http://www.example.com/login
8. 断点续传
通过使用-C选项可对大文件使用断点续传功能
curl能够从特定的文件偏移处继续下载,它可以通过指定一个偏移量来下载部分文件:
curl URL/File -C 偏移量
通过添加-C选项继续对该文件进行下载,已经下载过的文件不会被重新下载
# 偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -
curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
通过--limit-rate选项对CURL的最大网络使用进行限制
# 下载速度最大不会超过1000B/second
curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html
下载指定时间内修改过的文件
当下载一个文件时,可对该文件的最后修改日期进行判断,如果该文件在指定日期内修改过,就进行下载,否则不下载。
该功能可通过使用-z选项来实现:
# 若yy.html文件在2011/12/21之后有过更新才会进行下载
curl -z 21-Dec-11 http://www.example.com/yy.html