如果文章对您有帮助,请帮 cc 点赞和关注,十分感谢 🙏
文章目录
- 介绍
- `--socks5` 使用代理
- `--output` `-o` 指定文件输出 `-O` 将路径作为文件名,当然也可以直接使用管道重定向
- `-i` 显示返回的头
- `--cookie` `-b`附带 cookie
- `-d` 添加 post 请求参数,默认带了 -d 就是发送 post 请求
- `-L --location` 跟踪重定向
- `-K --config` 指定配置文件
- `-J` 使用服务器建议的文件名
- `-#` 显示进度条
- `-H --header` 添加一个请求头,可重复
- `-d` 提供一个 POST 的请求体,可以将请求体内容写在文件中,然后使用 `@` 符号读取文件内容,可以省略 `-X POST` 指定请求类型为 POST
- `-X` 指定请求类型,`-X POST` 指定为 POST,默认都为 GET
- `-s` 静默模式,不输出返回内容
- `-v` 显示链接详情
- `--trace` `--trace-ascii` `--trace-time` 追踪模式
- `-w` `--write-out` 在请求完成后输出一些内容
- `--compressed` `--tr-compressed` 要求服务器压缩数据后再传输
- `-o` `-O` 指定输出文件
- `--limit-rate` 下载限速
- `--max-filesize` 限定最大文件
- 通配符
介绍
本文记录了 cc 在日常使用中常常使用到的 curl 的参数,以及 curl 的一些功能。
curl 在线手册,或使用命令
curl --manual
查看
- 代理下载文件
curl --socks5 220.1.212.2:33433 https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.14/bin/apache-tomcat-10.0.14.zip --output tomcat10.zip
- 发送 POST 请求
curl -d 'username=ddd&password=ddd' -i --cookie 'SESSION=MWIzNjI5NWYtMTI2YS00ZWUzLWE5YWYtZjcxMjc0NDMwODk2' 'http://localhost/user/add'
--socks5
使用代理
--output
-o
指定文件输出 -O
将路径作为文件名,当然也可以直接使用管道重定向
-i
显示返回的头
--cookie
-b
附带 cookie
-d
添加 post 请求参数,默认带了 -d 就是发送 post 请求
-L --location
跟踪重定向
-K --config
指定配置文件
- 可以把参数写在配置文件中,防止命令过长
- 默认的配置文件为 CURL_HOME 或 HOME 中的
.curlrc
文件 - 配置文件中可以省略两个减号,也可以省略参数的引号,前提是不带空格
也可以指定 url:url http://example.com
可以在参数和参数值之前添加=
或:
让配置文件更清晰 - 简单使用 config 指定配置
cat cmdline.conf
-v # 使用简写
--head # 使用全称
--location
user-agent 'Everything-is-an-agent' # 省略 --
url=http://localhost/hello
output=example.com.file # 省略 --,用 = 连接
curl -K cmdline.conf http://example.com
- 批量请求的配置
url=http://localhost:9527/dev-api/system/dept/{3340501,3340502,3340503,3340504,3340505,3340506,3340530,3340540,3340550,3340560,3340570,3340580}
header="Authorization: Bearer 5666418a-3ced-438e-937c-102cd6ac4140"
header="Cookie: rememberMe=true; nickname=admin; username=admin; io=7yc099-BpDIY7DIUAAA6; password=I7Gy+II0hYNuHCHvLJHILJw9qEd/FiUWf+UFyWjrI45QpjMokK48n9WiVXkpRU9H0S1Ov/qxCBNfIx0idakuFQ==; Authorization=5666418a-3ced-438e-937c-102cd6ac4140; Admin-Token=5666418a-3ced-438e-937c-102cd6ac4140"
request=DELETE
-v
-J
使用服务器建议的文件名
-#
显示进度条
-H --header
添加一个请求头,可重复
curl -H 'Content-Type: application/json' http://example.com
-d
提供一个 POST 的请求体,可以将请求体内容写在文件中,然后使用 @
符号读取文件内容,可以省略 -X POST
指定请求类型为 POST
- @ 符号可以读取一个文件,用来上传或都去文件中的内容
curl -H 'Content-Type: application/json' http://example.com -d '@params.json'
-X
指定请求类型,-X POST
指定为 POST,默认都为 GET
-s
静默模式,不输出返回内容
-v
显示链接详情
- 但是不会显示请求体内容,需要的话使用 --trace
--trace
--trace-ascii
--trace-time
追踪模式
- trace:打印包含 请求体 在内的所有请求信息,后面跟一个文件名称,
-
表示直接输出在控制台 curl --trace - http://example.com
- trace-ascii:将 16 进制用 ascii 解析
- trace-time:加上本地时间戳
-w
--write-out
在请求完成后输出一些内容
- 输出一些自带的变量,如 %{content_type},%{local_ip}
curl -w '%{local_ip}\n' http://example.com
--compressed
--tr-compressed
要求服务器压缩数据后再传输
- 其实是两个命令在请求时添加不同的头,需要服务器支持压缩才行
- compressed 添加头:
Content-Encoding
,更广泛 - tr-compressed 添加头:
Transfer-Encoding
,该头是专门为了自动解压缩设立的,但是应用没有那么广泛
-o
-O
指定输出文件
o
手动指定名称O
自动指定名称- 在多个 url 时,需要相应指定多个,可以使用
--remote-name-all
为多个 url 应用-O
选项,否则需要写多个-O
# 几个 url 就需要几个 -O
curl -O -O http://example.com/1 http://example.com/2
# 使用 --remote-name-all
curl --remote-name-all http://example.com/1 http://example.com/2
# 使用 --remote-name-all, 指定某个 url 使用 -o
curl --remote-name-all http://example.com/1 http://example.com/2 -o file2.txt
--limit-rate
下载限速
- 单位默认为字节,其他有:K,M,G
curl http://example.com --limit-rate 200K
--max-filesize
限定最大文件
- 值得注意的是,这是需要服务器支持,让 curl 知道文件的尺寸,否则是无效的
通配符
- 使用 通配符 同时访问多个 url
# 组合中的逗号不能空格,否则空格会变成地址的一部分
curl 'http://example.com/{one,two}.txt' -o "file_#1.text"
- 范围:
[1-100], [a-z]
curl 'http://example.com/[1-10].txt' -o "file_#1.text"
- 指定间隔:
[1-100:2]
- 列表:
{one,two}
curl 'http://example.com/{one,two}.txt' -o "file_#1.text"
- 组合:
{one,two}-{1,2}, {one,two}-[1-2]
- 上面两个都会进行笛卡尔积组合,one1,one2,two1,two2
curl 'http://example.com/{one,two}-[1-2].txt' -o "file_#1_#2.txt"
[1/4]: http://example.com/one-1.txt --> file_one_1.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
[2/4]: http://example.com/one-2.txt --> file_one_2.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
[3/4]: http://example.com/two-1.txt --> file_two_1.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
[4/4]: http://example.com/two-2.txt --> file_two_2.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
ls
file_one_1.txt file_one_2.txt file_two_1.txt file_two_2.txt
HTTP服务器可以选择在响应消息中提供Content-Disposition标头。这个标头可能包含服务器建议的文件名,
文件名编码和字符集问题。curl不会对文件名进行编码,因此你可能会得到一个URL编码的文件名(如果是在浏览器中,那么浏览器会使用合理的字符集来解码URL,将它还原成更易阅读的内容)。