Curl 快速入门
Curl 是命令行下的 HTTP 客户端,调试 API、下载文件、测试接口都离不开它。本文覆盖最常用的参数和场景。
发布于 2026年4月22日·3770 字·预计阅读 16 分钟
什么是 Curl
Curl 是一个命令行数据传输工具,支持 HTTP、HTTPS、FTP 等多种协议。对于开发者来说,它最常见的用途是调试 API 接口——不需要 Postman 或图形化工具,终端里一行命令就能发送请求。
基本用法
GET 请求
bash
curl https://api.example.com/users
默认就是 GET 请求,直接跟 URL。
查看响应头
bash
curl -I https://api.example.com/users
-I(大写 i)只返回响应头,不返回响应体。
查看完整交互过程
bash
curl -v https://api.example.com/users
-v(verbose)会打印请求头、响应头和响应体,调试时很有用。
POST 请求
发送 JSON 数据
bash
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "age": 30}'
参数说明:
| 参数 | 含义 |
|---|---|
-X POST | 指定 HTTP 方法(GET、POST、PUT、DELETE 等) |
-H | 添加请求头 |
-d | 发送的数据 |
发送表单数据
bash
curl -X POST https://api.example.com/login \
-d "username=alice&password=secret"
Content-Type 会自动设置为 application/x-www-form-urlencoded。
发送文件
bash
curl -X POST https://api.example.com/upload \
-F "file=@/path/to/file.jpg"
-F 表示 multipart/form-data,@ 表示读取文件内容。
常用参数
| 参数 | 含义 | 示例 |
|---|---|---|
-X METHOD | HTTP 方法 | -X PUT |
-H "Key: Value" | 添加请求头 | -H "Authorization: Bearer TOKEN" |
-d "data" | 发送数据 | -d '{"key": "value"}' |
-F "key=@file" | 上传文件 | -F "image=@photo.jpg" |
-b "name=value" | 发送 Cookie | -b "session=abc123" |
-c cookies.txt | 保存响应的 Cookie 到文件 | |
-L | 跟随重定向 | |
-o file.txt | 保存响应体到文件 | |
-O | 以 URL 中的文件名保存 | |
-s | 静默模式,不显示进度条 | |
-w "\n状态码: %{http_code}" | 自定义输出格式 | |
-k | 跳过 SSL 证书验证 | 仅测试环境使用 |
--connect-timeout 5 | 连接超时(秒) | |
--max-time 30 | 整体超时(秒) |
认证
Bearer Token
bash
curl https://api.example.com/me \
-H "Authorization: Bearer eyJhbGciOi..."
Basic Auth
bash
curl https://api.example.com/me \
-u username:password
API Key(放在请求头)
bash
curl https://api.example.com/data \
-H "X-API-Key: your-api-key"
实战场景
调试 REST API
bash
# 创建用户
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice"}'
# 获取用户
curl https://api.example.com/users/1
# 更新用户
curl -X PUT https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "Alice Updated"}'
# 删除用户
curl -X DELETE https://api.example.com/users/1
下载文件
bash
# 保存到指定文件名
curl -o archive.zip https://example.com/download/archive.zip
# 用 URL 中的原始文件名保存
curl -O https://example.com/files/data.csv
# 显示下载进度
curl -# -O https://example.com/large-file.zip
检查网站是否可达
bash
# 只看状态码
curl -s -o /dev/null -w "%{http_code}" https://example.com
# 输出示例: 200
# 查看响应时间
curl -s -o /dev/null -w "状态码: %{http_code}, 耗时: %{time_total}s\n" https://example.com
发送请求并格式化 JSON 输出
bash
# 配合 jq 美化 JSON(需要安装 jq)
curl -s https://api.example.com/users | jq .
# 如果没有 jq,用 python
curl -s https://api.example.com/users | python -m json.tool
速查表
text
基本请求:
curl URL GET 请求
curl -X METHOD URL 指定方法
curl -v URL 查看完整过程
curl -I URL 只看响应头
发送数据:
-d '{"key":"val"}' JSON 数据
-H "Content-Type: ..." 设置请求头
-F "file=@path" 上传文件
-d "key=val&key2=val2" 表单数据
认证:
-H "Authorization: Bearer TOKEN"
-u user:pass Basic Auth
输出控制:
-o file 保存到文件
-O 用远程文件名保存
-s 静默模式
-w "%{http_code}" 自定义输出
-L 跟随重定向
调试:
--connect-timeout N 连接超时
--max-time N 总超时
-k 跳过 SSL 验证