curl命令常用参数详细使用笔记

curl命令常用参数详细使用笔记

对于Linux的学习,最早是在高考结束后,从接触树莓派开始。是赵辉老师对我的引导,所以一开始在大学之前就读了鸟哥的Linux私房菜,真的是获益匪浅。在学习中发现curl这个命令真的是非常强大,虽然网上有一大堆解释命令参数的文章,但是详细说明每一个参数使用的却没有多少。所以决定对curl的每一个参数都测试使用一下,毕竟

书到用时方恨少,事非经过不知难!

curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。

这里我先对每个参数逐一测试使用,最后再统一汇总。

-V/–version 显示版本信息

curl不加参数直接请求,这里以我的博客为例,之前用的是http,现在部署了https。

很明显网站返回的一个301的跳转,但curl并不会跟随跳转,而是直接返回内容。

-v, –verbose 输出详细信息

-I/–head 只显示响应header,经常用于测试连接本身

此时显示了响应的header头部字段。指向我博客的https链接。

-L/–location 跟踪重定向

-s/–silent 静默模式,不输出任何东西

a.zgao.top是一个不存在的子域名。

-S/–show-error 显示错误,在选项 -s 中,当 curl 出现错误时将显示

-o/–output 把输出写到该文件中,必须输入保存文件名

-O/–remote-name 把输出写到该文件中,保留远程文件的文件名

以为我博客上提供下载的一个文件为例

-w/–write-out [format]  传输完成后再输出什么

-#/–progress-bar 用进度条显示当前的传送状态

我觉得在我们下载大文件时,进度条挺直观的,尤其是在开发中调用curl命令下载。相比用代码实现下载进度条要方便很多。

-f, –fail 不显示 连接失败时HTTP错误信息,只显示抓取错误

http://106.15.73.80/download/test 是一个不存在的页面,会返回404

–retry 传输出现问题时,重试的次数

-R/–remote-time 在本地生成文件时,保留远程文件时间

-u, –user <user:password> 使用帐户,密码 例如 admin:password

-l, –list-only 只列出FTP目录的名称 (F)

-i, –include 显示内容的同时显示response的header (H/F)

-X, –request [GET|POST|PUT|DELETE|…] 使用指定的 http method 例如 -X POST

-T, –upload-file <file> 上传文件

-b, –cookie <data> cookie 文件 或者 字符串 (H)

-A, –user-agent user-agent设置 (H)

-d, –data <data> 设定 http body 默认使用 content-type application/x-www-form-urlencoded (H)

-G, –get 使用 HTTP GET 方法发送 -d 数据 (H)

如果不加-G参数使用-d,就是一个post请求。

-e, –referer 设定 referer (H) 有的网站会判断,请求来源地址,比如防盗链

-H, –header <header> 设定 request里的header

其实-e也可以用-H来修改,-H “Referer:Zgao”这样也行,因为Referer本身也是一个header。

-x, –proxy [PROTOCOL://]HOST[:PORT] 在指定的端口上使用代理

-F, –form <name=string> 模拟 HTTP 表单数据提交 multipart POST (H)

-D, –dump-header <file> 将头信息写入指定的文件
-c, –cookie-jar <file> 操作结束后,要写入 Cookies 的文件位置

-r/–range 检索来自HTTP/1.1或FTP服务器字节范围 

高级用法

循环下载
curl -O http://106.15.73.80/download/screen[1-10].jpg
循环(匹配)下载
curl -O http://106.15.73.80/download/[001-201].jpg

在使用curl时,会希望获取更多的信息,比如请求耗时,访问时延,请求大小等相关参数,虽然配合其他命令也可以实现该效果,比如time 命令配合curl命令公共使用,不过还是不够方便,可以使用curl 命令的格式化输出的功能,配置显示格式。

            time_namelookup:  %{time_namelookup}\n
               time_connect:  %{time_connect}\n
            time_appconnect:  %{time_appconnect}\n
           time_pretransfer:  %{time_pretransfer}\n
              time_redirect:  %{time_redirect}\n
         time_starttransfer:  %{time_starttransfer}\n
                            ----------\n
                 time_total:  %{time_total}\n
                  http_code:  %{http_code}\n
                            ----------\n
                   local_ip:  %{local_ip}\n
              size_download:  %{size_download}\n
                size_header:  %{size_header}\n
               size_request:  %{size_request}\n
                size_upload:  %{size_upload}\n
             speed_download:  %{speed_download}\n
               speed_upload:  %{speed_upload}\n

大家自己测试时可以用这段格式化配置,参考了CSDN上的文章。

对于curl命令的常用参数,我就整理到这里了,对于还有一些不常用的参数可以使用 curl –help 查看,不过是英文的,看起来不方便,。那么就到这里了吧!花了我很长时间整理的,喜欢的话记得收藏哦!

zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。