文章目录
1. 功能简介
curl
是用来请求 web 服务器的常用工具,作用是发出网络请求并得到服务器端的返回数据。它支持多种协议,功能很强大,用于 web 服务的测试效果极佳
2. 参数列表
在终端使用命令 man curl
可以得到 curl
的详细文档,整理文档得到常用的命令参数如下
2.1 HTTP 协议相关
参数 | 功能 |
---|---|
–http2 / --http1.1 / --http1.0 | 指定使用的 HTTP 协议版本 |
-4, --ipv4 / -6, --ipv6 | 指定 IP 地址协议 |
-H, --header < header > | 直接指定HTTP request 头信息,通常会包括 Content-Type 等关键信息 |
-A, --user-agent < name > | 在 HTTP request 头信息中声明客户端用户代理 |
-L,–location | curl 自动重定向到新的网址 |
-e, --referer < URL > | 在 HTTP request 头信息中声明请求来源地,服务器利用这个可防止盗链 |
–limit-rate | 限制 HTTP 请求和回应的带宽,模拟慢网速的环境 |
-X, --request < command > | 指定 HTTP 请求方法,默认是 GET |
-F, --form <name=content> | 指定表单形式传输数据或者图片等多媒体文件, 请求方法为 POST |
–data-raw < data > | 发送 POST 请求的数据体,可用于发送 Json 格式数据 |
-i, --include | 显示 Response 的 Header 信息以及响应数据 |
-b, --cookie < data > | 指定 curl 去给定的文件中读取 Cookies 发送给服务器,该指令与 -c 可同时使用 |
-c, --cookie-jar < filename > | 指定curl 保存这次请求中服务器设置的Cookies 到指定文件 |
HTTP 请求方法对应 curl 参数
参数 | 功能 |
---|---|
-I, --head | 指定 HTTP 请求方法为 HEAD |
-d, --data < data > | 指定 HTTP 请求方法为 POST,并发送 POST 请求的数据体,可以指定一个文件传递给 curl |
-T | 指定 HTTP 请求方法为 PUT |
-G, --get | 指定 HTTP 请求方法为 GET |
2.2 其他常用
参数 | 功能 |
---|---|
-K,–config | curl 从指定的配置文件中读取选项 |
-v | 显示网络通信的大致过程 |
–trace-ascii < fileName > | 显示网络通信的详细过程,并将其输出到指定文件 |
3. 使用示例
3.1 查看通信过程
显示一次网络通信的整个过程
- 向 www.baidu.com 发出 GET 请求,并显示交互的报文
curl -v www.baidu.com
- 向 www.baidu.com 发出 GET 请求,并将交互的报文输出到文件 dump.txt 中
curl --trace-ascii dump.txt www.baidu.com
3.2 POST 提交数据
- 向目标地址发出 POST 请求,请求携带的参数为键值对
ids = "12,23"
,注意传递带有空格逗号等分隔符的参数时需要用引号把参数包裹起来
curl -v -d 'ids = "12,23"' http://10.0.7.63:8807/match/del
- 向目标地址发出 POST 请求,请求体为 Json 字符串,此时需要指定请求头 Content-Type。如果不指定的话,默认使用 application/x-www-form-urlencoded 形式传输数据,服务端解析请求时可能会报错
curl -X POST --data-raw '{"borrowerId": "12346309"}' 'http://10.0.7.63:8807/target/list' --header 'Content-Type: application/json'
- 向目标地址提交一个二进制文件,可以使用 --data-binary 选项来指定
curl --data-binary <file> http://example.com
3.3 其他
- 指定 user-agent,服务端通常会通过 user-agent 防爬虫
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' http://www.baidu.com
- 指定跳转来源
curl -v -e www.hh.com www.baidu.com
- 指定 GET 请求的参数,相当于拼接以下 URL 为 https://www.baidu.com/?comment=hello world
curl -v -G -d 'comment=hello world' https://www.baidu.com
- 通过配置文件来指定 curl 参数
curl -K curl.options http://www.baidu.com
curl.options
文件内容如下:
-v
# ask curl to follow redirects
--location
# ask curl to do a HEAD request
--head
# ask curl to change the User-Agent in HTTP header
-A "something-is-an-agent"