curl (网络请求 / Client URL)
1. 定义
curl 是用命令行发送 HTTP/HTTPS/FTP 等网络请求的瑞士军刀工具,能从 URL 下载数据,也能向服务器提交数据。 几乎每个排查接口、联调后端、测试 API 的人都离不开它。
类比:curl 像是浏览器的”纯文本版”——不发渲染页面,只收发原始请求和响应,方便调试。
2. curl 能做什么
| 场景 | 作用 |
|---|---|
| 接口联调 | 手动发 GET/POST 请求,验证后端 API |
| 下载文件 | 从 URL 拉取文件、资源 |
| 排查网络 | 看请求头、响应头、状态码、耗时 |
| 鉴权测试 | 带 token / cookie 访问受保护接口 |
| 压测前探活 | 确认服务可达、健康检查通过 |
3. 核心概念
- URL:curl 后跟的第一个位置参数就是目标地址
- 请求方法:默认 GET,可用
-X指定 POST/PUT/DELETE 等 - 请求头
-H:自定义 Header,如Content-Type、Authorization - 请求体
-d:发送数据(表单或 JSON) -v详细模式:打印完整的请求/响应过程,调试首选-s静默模式:不显示进度条,适合脚本
4. 常用命令
GET 与下载
curl https://api.example.com/users # 默认 GET,输出响应体
curl -I https://example.com # -I 只看响应头(HEAD 请求)
curl -O https://example.com/file.zip # -O 按原文件名保存
curl -o page.html https://example.com # -o 指定保存文件名
curl -L https://example.com # -L 跟随重定向POST 与数据提交
curl -X POST https://api.example.com/login \
-d "username=ava&password=123" # -d 表单格式提交
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name":"ava","age":20}' # 提交 JSON
curl -X POST https://api.example.com/upload \
-F "file=@photo.png" # -F 表单文件上传鉴权与头部
curl https://api.example.com/me \
-H "Authorization: Bearer <token>" # 带 Bearer token
curl https://api.example.com \
-H "Accept: application/json" \
-b "sessionid=abc123" # -b 发送 cookie
-c cookies.txt https://example.com # -c 把响应 cookie 存到文件调试与排查
curl -v https://api.example.com # -v 打印完整收发过程
curl -s -o /dev/null -w "%{http_code}" https://example.com # 只取状态码
curl -w "time_total=%{time_total}\n" https://example.com # 看总耗时
curl -x http://proxy:8080 https://example.com # 走代理5. curl vs 其他工具
| 工具 | 特点 | 何时用 |
|---|---|---|
curl | 通用、几乎系统自带、协议全 | 调试接口、脚本里发请求、下载 |
wget | 递归下载、断点续传强 | 批量/站点镜像下载 |
httpie (http) | 语法友好、输出彩色 JSON | 人工交互式 API 调试更顺手 |
Postman | GUI、可保存集合 | 复杂接口测试、团队协作 |
6. 典型工作流
联调一个 JSON 接口
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
-d '{"user":"ava","pwd":"123"}' -v健康检查 / 探活
code=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health)
echo "status=$code"下载并跟随重定向
curl -L -O https://github.com/owner/repo/archive/main.zip7. 常见误区
- ❌ “POST 用
-d但服务器收不到 JSON”。没加-H "Content-Type: application/json",服务器按表单解析导致字段为空。 - ❌ “
-X POST后-d不生效”。-d会自动把方法设为 POST,多数情况不用写-X POST,多余反而易错。 - ❌ “脚本里 curl 输出一堆进度信息污染结果”。加
-s静默,再配合-o /dev/null -w只取想要字段。 - ❌ “HTTPS 证书报错直接
-k跳过”。-k关闭证书校验有安全风险,仅临时调试用,生产脚本别留。
8. 延伸阅读 / 关联概念
wget— 偏下载场景的命令行工具httpie— 更人性化、彩色输出的 API 调试 CLI- HTTP 方法 / 状态码 / Header — 理解 curl 收发内容的底层
- RESTful API 设计 —— curl 最常联调的对象
- curl 官方文档:https://curl.se/docs/manpage.html