curl 命令生成器
在表单中指定 HTTP 方法、URL、请求头、请求体和认证方式,即可生成可直接复制运行的 curl 命令。由于并不会真正发送请求,因此不受 CORS 限制。
常用 curl 选项一览
| 选项 | 说明 |
|---|---|
| -X, --request <method> | 指定 HTTP 方法(GET、POST、PUT、PATCH、DELETE 等)。省略时,无请求体默认为 GET,有请求体默认为 POST。 |
| -H, --header <header> | 添加一条请求头。如需添加多条,可重复使用 -H。 |
| -d, --data <data> | 发送请求体。若未指定 -X,会自动以 POST、Content-Type: application/x-www-form-urlencoded 的方式发送。 |
| -u, --user <user:password> | 以 "user:password" 格式指定 Basic 认证的用户名和密码。 |
| -k, --insecure | 跳过 SSL 证书验证。适用于使用自签名证书的开发环境,生产环境不建议使用。 |
| -L, --location | 当服务器返回 3xx 重定向时,自动跟随 Location 头指示的目标地址。 |
| -v, --verbose | 在标准错误输出中显示包含请求和响应头在内的详细通信过程,便于调试。 |
| --compressed | 附加 Accept-Encoding 头,请求并自动解压 gzip 等压缩格式的响应。 |
| -o, --output <file> | 将响应体保存到指定文件,而不是输出到标准输出。 |
| -F, --form <name=content> | 以 multipart/form-data 格式发送表单数据或文件。文件上传时指定 "@文件路径"。 |
由表单拼出 curl 命令
在表单里指明方法、网址、标头、请求体与认证方式,便得出一条可直接贴进终端执行的 curl 命令。**本工具并不真的发出请求,故不受浏览器的跨域限制**——即便是网页无从调用的接口,命令照样拼得出来。
**在 curl 上绊住人的,是方法与请求体之间的干系。** 以 `-d` 附上请求体,**方法便自动成了 POST,纵使您一字未写。** 于是想发 PUT 或 PATCH 却只给了 `-d`,射出去的便是一个意料之外的 POST。另一桩常见之误,是明明送的是 JSON 却忘了写 `Content-Type: application/json`;curl 于是按 `application/x-www-form-urlencoded` 送出,**服务端便压根不把它当 JSON 来读。** 把生成的命令贴进终端时,也请留心 shell 的引号:**单引号之内变量不会展开,双引号之内则会。**
使用方法
- 指明方法与网址 取用选 GET,送出选 POST。
- 添上标头 **若送的是 JSON,切莫忘了 `Content-Type: application/json`。**
- 写下请求体 **附上请求体后,未指明方法时便自动成为 POST。**
- 复制命令去执行 贴进终端即可,别无他求。
用好本工具的小技巧
- 生成的命令可以直接粘贴到 终端、Shell 脚本或 CI/CD 配置文件 中运行,所有值均已用单引号转义完毕。
- 如果方法仍为 GET 却输入了请求体,会显示警告。因为 curl 在省略
-X而使用-d时会自动以 POST 方式发送,此提示可帮助你避免意料之外的行为。 - 勾选"自动添加 Content-Type: application/json"后,会自动补上调用 JSON API 时容易遗漏的 Content-Type 头。
- Basic 认证和 Bearer 令牌的输入值均仅在浏览器内处理,绝不会发送到任何服务器。
- 生成的
-k(跳过证书验证)只是针对自签名证书本地开发环境的临时应对方案,请勿在生产环境的 API 中长期使用。
这些场景会用到
试探接口的行为
**网页调不动的接口,用 curl 仍试得出来,跨域拦不住它。**
把命令写进操作手册
可把一次请求的内容,记成人人都能复现的样子。
分享故障的复现步骤
**递给对方一条命令去跑,所得的复现受环境差异的影响小得多。**
学习 curl 的选项
可以看出表单里的每一项各自变成了哪个选项。
curl 的术语
- -X
- 明确指明方法。**因 `-d` 即便不写也会成为 POST,故 PUT 与 DELETE 时非它不可。**
- -H
- 添一条标头。写上数次,便添上数条。
- -d
- 指明请求体。**写了它,方法便成为 POST,默认的内容类型则成了表单编码。**
- -u
- 指明基本认证的用户名与口令,写作 `用户名:口令`。
- Bearer 令牌
- 以 `Authorization: Bearer ...` 送出凭据的方式。极多接口都采此形。
- -i 与 -v
- 显示响应标头,以及显示交互的细节。**二者在事情不灵时都值回票价。**
常见问题
-X 选项的情况下使用 -d(请求体)时,会自动以 POST 方式发送。如果确实需要在保持 GET 的同时发送请求体,可在生成的命令后手动添加 -X GET。
闲话 ― 为什么 curl 是"人人都在用却几乎无人知晓"的工具
curl 是瑞典工程师丹尼尔·斯坦伯格(Daniel Stenberg)于 1996 年开发的一款通过 URL 传输数据的命令行工具。它最初源于为 IRC 聊天机器人获取汇率信息的一个小脚本,此后逐渐发展成支持 HTTP、FTP、SMTP 等 25 种以上协议的庞大项目。
curl 被认为是全球使用最广泛的软件之一。智能手机、汽车、家电、游戏机乃至航天器(NASA 的火星探测任务中也有使用记录)等几乎所有联网设备内部都嵌入了它,据估计其安装量高达数百亿台规模。尽管普及程度如此之高,它在开发者以外的人群中却几乎无人知晓,是"幕后功臣"的典型代表。
2019 年,斯坦伯格因对 Web 基础技术的贡献获得 Linux 基金会表彰。他至今仍是 curl 项目的核心维护者,二十多年来一直谨慎地推进开发,以避免破坏向后兼容性而著称。
即便在 Postman 等图形化工具普及的今天,curl 命令依然被广泛用于 README、官方文档和 API 调试步骤中。原因很简单:curl 无需安装,几乎预装在所有 Linux 和 macOS 环境中,只需一条命令即可当场执行并分享结果,这种极高的可复现性是其他工具难以取代的。