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 输出请求扩展信息

以下是支持的一些扩展字段说明:

  1. url_effective 最终获取的url地址,尤其是当你指定给curl的地址存在301跳转,且通过-L继续追踪的情形。
  2. http_code http状态码
  3. time_total 请求总耗时,单位秒,精确到小数点后三位
  4. time_namelookup DNS解析耗时
  5. time_connect 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间
  6. time_appconnect 连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间
  7. time_pretransfer 从开始到准备传输的时间
  8. time_redirect 重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间
  9. time_starttransfer 开始传输时间。在发出请求之后,服务器返回数据的第一个字节所用的时间
  10. size_download 下载大小
  11. size_upload 上传大小
  12. size_header 下载的header的大小(The total amount of bytes of the downloaded headers.)
  13. size_request 请求的大小
  14. speed_download 下载速度,单位:字节每秒
  15. speed_upload 上传速度,单位-字节每秒
  16. num_connects 最近的的一次传输中创建的连接数
  17. num_redirects 在请求中重定向跳转次数
  18. ftp_entry_path 当连接到远程的ftp服务器时的初始路径
  19. 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




返回软件开发辅助网 | 常用命令列表

shell语法手册