背景
- 看到开发都是用这个命令来调接口,我也跟着用了
- 的确很方便,有时候你要跟开发讲某个接口可能有问题的时候,总不能每次都截图吧,这样可信力也不高
- 所以写 curl 调接口是最快的,直接让开发复制粘贴执行一遍,就知道接口的确有问题了
curl 介绍

- curl 是常用的命令行工具,用来请求 Web 服务器
- 它的名字就是客户端(client)的 URL 工具的意思
- 它的功能非常强大,命令行参数多达几十种
- 如果熟练的话,完全可以取代 Postman 接口测试工具
官方文档
https://curl.se/docs/manpage.html
支持的协议
- DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS
- IMAP、IMAPS、LDAP、LDAP、POP3、POP3、RTMP、RTSP、SCP、SFTP、SMB
- SMBS、SMTP、SMTPS、TELNET、TFTP
提供强大的功能
- 代理支持
- 用户身份验证
- FTP上传
- httppost
- SSL连接
- cookies
- 文件传输恢复
- Metalink
- 等等
语法格式
URL 的各种传法
仅做拓展,实际工作感觉不一定会用的上
大括号 { }
http://site.{1,2,3}.com
等价于发了请求了三个 host
http://site.1.com
http://site.2.com
http://site.3.com
中括号 [ ] 获得字母数字序列
类似 range(1,100)
ftp://ftp.example.com/file[1-100].txt文件 # 100个请求
ftp://ftp.example.com/file[001-100].txt(带0) # 100个请求
ftp://ftp.example.com/file[a-z].txt文件 # 26个请求
注意:不支持嵌套序列,但可以在每个序列旁边使用多个嵌套序列
综合使用
http://example.com/archive[1996-1999]/vol[1-4]/第{a,b,c}部分.html
[ ] 结合 步进
http://example.com/file[1-100:10].txt文件 # 每10个取一次,总共10个请求
http://example.com/file[a-z:2].txt文件 # 每2个取一次,总共13个请求
常见参数
不带参数
请求网页地址
https://www.cnblogs.com/poloyy/
返回的是网页的 html 源码
如果是一个正常的 get 请求
注意
后面的栗子,基本都会加 -v,是为了看请求的详细过程,更容易看到对应的参数已生效,实际使用不需要每次都 -v
-A
- 等价参数: --user-agent <name>
- 作用:指定客户端的 User-Agent
curl -v -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" http://baidu.com
-b
- 等价参数: --cookie <data|file>
- 作用:向服务器发送 Cookie,可以是 data 也可以是一个文件
curl -v -b 'foo=bar' http://baidu.com
Request Headers 将会生成一个Cookie: foo=bar
,向服务器发送一个名为 foo
、值为 bar
的 Cookie

通过打印详细信息,可以看到请求头的确加了
-c
- 等价参数: --cookie-jar <filename>
- 作用:将服务器返回需要设置的 Cookie 写入一个文件
curl -k -v -c test.txt https://www.baidu.com/s?wd=123%E8%89%BE%E5%BE%B7&rsv_spt=1&rsv_iqid=0xf0b9806f0000107b&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=1138&rsv_sug4=1138
会将百度响应需要设置的 Cookie 写入 test.txt 文件

-d(常用)
- 等价参数: --data <data>
- 作用:用于发送 POST 请求的数据体
curl -v -d 'wd=biying' -d 'ie=UTF-8' https://www.baidu.com/s

- Http 请求头会自动加上 Content-Type : application/x-www-form-urlencoded
- 并且会自动将请求转为 POST 方法,因此可以省略
-X POST
--data-urlencode(常用)
作用:参数等同于 -d
,发送 POST 请求的数据体,但它会自动将发送的数据进行 URL 编码
curl -v -G --data-urlencode 'wd=b i y i n g' -d 'ie=UTF-8' https://www.baidu.com/s

会将空格进行 URL 编码
curl -v -G -d 'wd=b i y i n g' -d 'ie=UTF-8' https://www.baidu.com/s

-d 就不会 url 编码