curl 深度教程
curl 深度教程
curl(Client URL)是世界上最广泛使用的命令行数据传输工具之一,支持 HTTP、HTTPS、FTP、SMTP 等数十种协议。从简单的网页抓取到复杂的 API 调试,从容器健康检查到大规模自动化测试,curl 无处不在。
为什么写这个教程?
curl 的 man page 超过 5000 行,官网列出 250+ 个命令行选项。大多数开发者只会用到 curl https://example.com 这一层面,但 curl 的真正威力远不止于此:
- 🔍 精确控制每一个 HTTP 请求细节
- 🔐 支持从 Basic 到 OAuth2 的全链路认证
- 📦 原生支持 multipart/form-data 文件上传
- 🛡️ TLS/SSL 证书验证与客户端证书
- 📊 请求时间分析与连接诊断
- 🐳 Docker 健康检查与容器间通信
- 📝 完整的脚本化能力,可嵌入 CI/CD 流水线
教程目录
本教程共 15 章,从基础概念到高级实践,适合各层次开发者:
| 章节 | 标题 | 关键内容 |
|---|---|---|
| 01 | curl 简介与生态 | 历史、设计理念、与 wget/httpie 对比 |
| 02 | 安装与编译 | 多平台安装、版本管理、TLS 后端、libcurl |
| 03 | 基本用法 | GET/POST、请求头/响应头、输出控制 |
| 04 | HTTP 方法详解 | GET/POST/PUT/DELETE/PATCH/OPTIONS/HEAD |
| 05 | 请求头与响应头 | 自定义头、Cookie、认证头、Content-Type |
| 06 | 认证机制 | Basic/Bearer/OAuth2/客户端证书/NTLM/Kerberos |
| 07 | POST 数据与上传 | 表单、JSON、文件上传、multipart、编码 |
| 08 | 下载与传输管理 | 断点续传、限速、进度条、并行下载 |
| 09 | 传输选项与网络调优 | 超时、重试、代理、SOCKS、连接池 |
| 10 | TLS/SSL 安全 | 证书验证、自签名证书、HSTS、密码套件 |
| 11 | 脚本编写 | 变量、配置文件、批量请求、错误处理 |
| 12 | 调试与诊断 | -v/–trace、时间分析、连接诊断 |
| 13 | API 测试 | REST/GraphQL/gRPC、自动化测试、断言 |
| 14 | Docker 中的 curl | 健康检查、API 测试、容器间通信 |
| 15 | 最佳实践 | 安全、性能、脚本化、常见陷阱 |
阅读建议
- 初学者:从第 01-03 章开始,掌握基本概念和用法
- 后端开发者:重点阅读第 04-07 章(HTTP 方法与数据传输)和第 13 章(API 测试)
- 运维/SRE:重点阅读第 08-09 章(传输管理)、第 12 章(调试)和第 14 章(Docker)
- 安全工程师:重点阅读第 06 章(认证)和第 10 章(TLS/SSL)
- 效率追求者:直接跳到第 15 章(最佳实践)
环境说明
本教程中所有命令示例均基于以下环境:
| 项目 | 版本/说明 |
|---|---|
| curl | 8.x(大部分命令兼容 7.68+) |
| 操作系统 | Linux(命令同样适用于 macOS) |
| Shell | Bash 5.x |
| 测试服务 | httpbin.org、example.com、localhost |
⚠️ 注意:curl 的行为和可用选项可能因编译选项和版本不同而有差异。使用
curl --version查看你的 curl 版本和支持的特性。
快速开始
如果你已经安装了 curl,可以直接体验:
# 查看版本和支持的协议
curl --version
# 发送一个简单的 GET 请求
curl https://httpbin.org/get
# 带参数的 GET 请求
curl "https://httpbin.org/get?name=curl&version=8"
# 发送 POST 请求(JSON)
curl -X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"hello": "world"}'
# 下载文件并显示进度
curl -LO https://example.com/file.zip
# 调试模式查看完整请求/响应
curl -v https://httpbin.org/get