curl命令
curl(CommandLine URL)命令是一个功能强大的网络工具,它利用URL的语法进行数据的传输或者文件的传输.支持的协议有30多种,如常见的http,ftp,pop3等.
curl选项较复杂,这里只列出常用的选项和示例
语法
curl [options...] <url>
常用选项
-A, --user-agent STRING 设置请求的User-Agent
-b, --cookie STRING/FILE 发送cookie,格式为"name1=val1;name2=val2",如果没有=表示是个cookie文件路径
-c, --cookie-jar FILE 把请求返回的cookie写入到文件中
-C, --continue-at OFFSET 断点续传. 从文件头的指定位置开始继续下载, OFFSET是上传起始偏移量,"-"表示从文件头开始
-d, --data DATA HTTP POST 方式发送请求数据,相当于application/x-www-form-urlencoded
--data-ascii DATA HTTP POST 发送ASCII数据
--data-binary DATA HTTP POST 发送二进制数据
--data-urlencode DATA HTTP POST 对发送数据作url编码
如果数据以“@”开头,后紧跟一个文件,将post文件内的内容
-e, --referer 设置一个请求来源页 即http Referer
-F, --form CONTENT HTTP POST 发送form数据,相当于multipart/form-data,字段值以"@" 或 "<"开头表示上传的文件名
--form-string STRING 只上传字符串,@<等特殊字符当成普通字符处理
--ftp-account DATA FTP协议时表示账号
--ftp-create-dirs FTP协议时,如果远程目录不存在则创建
-G, --get http get请求. 如果使用了此参数,-d参数设置的数据,讲附加在url上,以GET的方式请求
-H, --header "headerField:val" 添加一个http header,val可以为空表示清除这个请求头的值
-i, --include 输出时包含请求的http header
-I, --head 只输出请求头,不输出返回内容. FTP/FILE时,将会获取文件大小、最后修改时间
-k, --insecure 允许SSL请求时不带证书
-L, --location 追随http响应头“Location:”定向到跳转后的页面,重定向
--limit-rate RATE 限速;如果未指定单位,默认单位为“bytes/秒”,可以指定单位为K/M/G等,如:“--limit-rate 2m”
-m, --max-time SECONDS 限制整个请求的最长时间,单位为秒
--connect-timeout SECONDS 连接超时
-o, --output file 将返回内容输出到文件
-O, --remote-name 将文件内容写入当前目录与远程文件名同名的文件
-#, --progress-bar 显示下载进度
-s, --silent 静默模式。不要显示进度表或错误等信息
-T, --upload-file FILE put方式上传文件,FILE使用"-"时表示将通过stdin读入文件内容
-w FORMAT 请求完成后输出一些扩展属性
-X, --request COMMAND 指定http请求方法,如:GET、PUT、POST、DELETE等
-v, --verbose 显示更详细的信息,可用于调试
-u, --user USER[:PASSWORD] 设置用户名和密码,相当于设置http头“Authorization:”
-1, --tls Use => TLSv1 (SSL)
-2, --sslv2 Use SSLv2 (SSL)
-3, --sslv3 Use SSLv3 (SSL)
-4, --ipv4 解析名称为IPv4地址,如果服务端绑定的是tcp6端口可能需要指定该项才能访问到
-6, --ipv6 解析名称为IPv6地址
示例
请求http页面,并保存到文件index.html
curl -o index.html http://devfz.cn
curl http://devfz.cn/book/linux_cmd_handbook/ > index.html
POST请求
# 提交json参数
curl -X POST -H 'content-type: application/json' -d @json文件绝对路径 http://devfz.cn/api/adduser
curl -X POST -H 'content-type: application/json' -d '{"id":12}' http://devfz.cn/api/adduser
# 普通表单格式
curl -X POST -d "userId=121&age=26" http://devfz.cn/api/user
# 普通表单,对参数url编码
curl -X POST --data-urlencode "userId=121&age=26" http://devfz.cn/api/user
模拟登录,使用cookie
#请求登录接口并保存返回的cookie
curl -X POST -c ./cookie.txt -d "user=abc&passwd=mypwd" http://devfz.cn/login
#请求接口,带上登录时的cookie
curl -b ./cookie.txt http://devfz.cn/home
ftp操作
# 上传文件
curl -T myfile.zip ftp://用户名:密码@ip:port/user/local
# 下载文件
curl -O ftp://用户名:密码@ip:port/user/local/myfile.zip
-w 输出请求扩展信息
以下是支持的一些扩展字段说明:
- url_effective 最终获取的url地址,尤其是当你指定给curl的地址存在301跳转,且通过-L继续追踪的情形。
- http_code http状态码
- time_total 请求总耗时,单位秒,精确到小数点后三位
- time_namelookup DNS解析耗时
- time_connect 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间
- time_appconnect 连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间
- time_pretransfer 从开始到准备传输的时间
- time_redirect 重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间
- time_starttransfer 开始传输时间。在发出请求之后,服务器返回数据的第一个字节所用的时间
- size_download 下载大小
- size_upload 上传大小
- size_header 下载的header的大小(The total amount of bytes of the downloaded headers.)
- size_request 请求的大小
- speed_download 下载速度,单位:字节每秒
- speed_upload 上传速度,单位-字节每秒
- num_connects 最近的的一次传输中创建的连接数
- num_redirects 在请求中重定向跳转次数
- ftp_entry_path 当连接到远程的ftp服务器时的初始路径
- ssl_verify_result ssl认证结果,返回0表示认证成功
示例: curl统计http请求耗时:
curl -o /dev/null -s -w 'DNS解析时长:%{time_namelookup}\n建立tcp时长:%{time_connect}\n客户端到服务器时长:%{time_starttransfer}\n从开始到结束时长:%{time_total}\n下载速度:%{speed_download}\n' http://10.18.200.33:9091/static/vue.min.js
结果输出:
DNS解析时长:0.000
建立tcp时长:0.000. 0.000
客户端到服务器时长:5.179
从开始到结束时长:5.180
下载速度:16690.000