深入浅出地讲解如何使用CURL命令行工具进行API测试
目录
- 一、CURL 请求的基本结构
- 二、4种HTTP请求方法测试
- 1. GET:获取资源(最简单,默认方法)
- 2. POST:提交数据(创建资源)
- 3. PUT:更新资源(全量替换)
- 4. DELETE:删除资源
- 三、调试必备:5 个实用选项
- 四、避坑指南:这些细节要注意
- 五、对比 Postman:curl 的优势
一、CURL 请求的基本结构
curl [选项] [URL]
-
选项:控制请求方法、头信息、数据、认证等(如
-X
指定方法,-H
加请求头,-d
传数据)。 -
URL:API 的端点地址(如
https://jsonplaceholder.typicode.com
)。
二、4种HTTP请求方法测试
1. GET:获取资源(最简单,默认方法)
作用:从服务器拉取数据(如查列表、详情),参数跟在 URL 后(查询字符串)。
基础用法:直接访问 URL
curl -X GET https://jsonplaceholder.typicode.com/users # 默认发 GET 请求,获取所有用户
带查询参数(两种方式,推荐第二种!)
- 方式 1:URL 硬拼参数(适合简单场景):
curl https://api.example.com/users?page=2&size=10 # 查第 2 页,每页 10 条
⚠️ 缺点:特殊字符(如空格、&)需手动转义,否则会被 Shell 解析错误。
- 方式 2:用
--get
+-d
自动编码(更规范,自动处理特殊字符):
curl --get \ # 明确是 GET 请求
-d "page=2" \ # 参数 1
-d "size=10" \ # 参数 2(多个 -d 自动用 & 拼接)
https://api.example.com/users
👉 效果:等价于 https://api.example.com/users?page=2&size=10
,但无需手动转义!
2. POST:提交数据(创建资源)
作用:向服务器发数据(如注册、登录),数据藏在 请求体 里。
场景 1:发送表单数据(application/x-www-form-urlencoded
格式)
curl -X POST \ # 显式声明 POST(也可省略,因为 -d 会默认触发 POST)
-d "username=admin" \ # 键值对,多个用 & 连接(如 -d "user=xxx&pass=yyy")
-d "password=123" \
https://api.example.com/login
场景 2:发送 JSON 数据(必须加 Content-Type
头!)
curl -X POST \
-H "Content-Type: application/json" \ # 告诉服务器:我发的是 JSON!
-d '{"name": "Bob"}' \ # JSON 数据(外层用单引号,避免 Shell 解析双引号)
https://jsonplaceholder.typicode.com/users/
⚠️ 注意:
- JSON 里的双引号要和外层单引号配合(或转义,如
"{\"user\":\"xxx\"}"
,但单引号更方便)。 - 如果 JSON 内容复杂,可把数据存到文件,用
-d @文件路径
读取(如-d @data.json
)。
3. PUT:更新资源(全量替换)
作用:修改已有资源(如改用户信息),语义是 “替换” 整个资源(幂等:多次调用结果一样)。
示例:更新用户 ID=1 的姓名
curl -X PUT \
-H "Content-Type: application/json" \
-d '{"name": "NewName"}' \ # 要更新的字段
https://jsonplaceholder.typicode.com/users/1 # URL 明确资源 ID
👉 和 POST 类似,只是方法换成 PUT
,URL 需包含资源标识(如 /users/1
)。
4. DELETE:删除资源
作用:删除服务器上的资源(如删用户、订单)。
示例:删除用户 ID=1
curl -X DELETE https://jsonplaceholder.typicode.com/users/1 # URL 直接定位资源
- 一般不用请求体(HTTP 协议允许,但 API 很少这么设计),参数可通过 URL 或头传递。
三、调试必备:5 个实用选项
选项 | 作用 | 示例 |
---|---|---|
-i | 显示 响应头 + 响应体(看状态码、返回内容) | curl -i https://jsonplaceholder.typicode.com |
-v | 显示 完整请求过程(含请求头、响应头,调试神器) | curl -v -X POST ... |
-u user:pass | 基本认证(用户名:密码) | curl -u admin:123 https://api.com |
-H "头信息" | 自定义请求头(如 Token 认证) | curl -H "Authorization: Bearer xxx" ... |
-o 文件名 | 保存响应到文件 | curl -o result.json https://api.com |
四、避坑指南:这些细节要注意
-
URL 特殊字符:用引号包裹 URL(如
curl "``https://api.com/?q=hello&lang=en``"
),避免&
被 Shell 解析成后台运行。 -
JSON 格式:确保大括号、引号配对,可先用在线工具校验 JSON 语法。
-
SSL 证书问题:测试环境若证书无效,加
-k
忽略验证(生产环境禁用!):
curl -k https://不安全的域名 # 跳过 SSL 检查
五、对比 Postman:curl 的优势
-
无界面依赖:服务器环境(如 Linux 终端)直接用,无需装软件。
-
脚本化:把 curl 命令写到 Shell 脚本里,批量测试 API(如循环调用不同 ID 的 DELETE)。
-
灵活组合:和管道、 grep 等命令配合,快速处理响应(如
curl ... | grep "error"
找错误)。