cURL 命令生成器 — 一键拼出正确的 HTTP 请求命令
curl 命令生成器
身份验证
标头
请求正文
curl \ -H 'Accept: application/json' \ 'https://api.example.com/v1/items?page=2'
该命令在你的浏览器中组装,不会发送到任何地方。包含空格或 shell 元字符的值会用单引号包裹,因此命令可以按原样安全运行;值中出现的字面引号则按 POSIX 的方式转义。
功能介绍
curl(client URL)是一个用 URL 语法向服务器收发数据的命令行程序。它内置在 macOS 里,Git for Windows 的基础安装包也自带它,而几乎所有 CI 运行器、容器镜像和远程终端环境里都能找到它。它最初出现于 1998 年,只是为了在终端里抓网页,后来成长为通用的 HTTP 客户端:支持 HTTP/1.1 与 HTTP/2、HTTPS、代理、Cookie、重定向,以及 FTP 和 SFTP。 每条 cURL 命令的读法都一样,因为每个选项都对应请求的某个组成部分: - 方法选项。-X 后面跟一个动词,用来指定 HTTP 方法。GET 是 curl 的默认值,完全可以省略,光写一个 curl 加 URL 就是一次 GET,HEAD 同理。而 POST、PUT、PATCH、DELETE 和 OPTIONS 必须显式写出来,服务器才知道你要做什么。 - 请求头选项。每一组 -H 'Name: value' 添加一个 HTTP 头。Accept 说明你希望服务器返回什么格式,Content-Type 描述你发送的请求体,其他名字则原样透传。HTTP 头名称在协议层是不区分大小写的。 - 认证选项。-u 'user:password' 是 Basic 认证的简写,curl 会替你把用户名密码做 Base64 编码再塞进 Authorization 头。Bearer 令牌并没有对应的专用选项,只能用 -H 'Authorization: Bearer ...' 发送。要理解这个区别:-u 只是某个特定请求头的快捷写法,并不是第二套凭证机制,手写同样的 Authorization 头产生的请求完全等价。
- 数据选项。-d、--data 和 --data-raw 都会附带请求体,--data-urlencode 会对单个 name=value 做百分号编码。这里有个容易踩的坑:只要加了任何数据选项,curl 就会把方法默认切换成 POST,除非你自己用 -X 明确指定,于是本想发 PUT 的请求会悄悄变成一次创建操作。这个生成器把这件事显式呈现出来——方法还是 GET 时你一旦选了请求体,-X POST 就会自动出现。 - URL 放在最后,纯链接不加引号,带查询串则需要引号。 大部分手写命令都栽在引号上。shell 会在 curl 看到这行文字之前先解析它,把空格、&、|、;、$、>、*、?、圆括号、单引号和双引号当成语法而不是数据。把 https://api.example.com/search?q=a&b=2 直接粘进去,会在 & 处被劈成两半:curl 只请求了 /search?q=a,shell 又试图去执行剩下的 b=2,于是报出一个和接口毫无关系的 command not found。JSON 请求体也是同样的命运,因为花括号里的空格会把它拆成十几个参数。用单引号包起来,等于告诉 shell 原样传递。 单引号是最安全的包裹方式,因为引号内部的一切都不再被解释:$ 不是变量,反引号不是命令替换,第二个单引号也不会提前结束字符串。唯一的问题是值里本身就含有单引号,而单引号内部无法转义单引号。POSIX 的解决办法是「结束引号、插入一个反斜杠转义的单引号、重新开启引号」,这就是本工具在头信息值或密码中出现撇号时自动输出的写法。
还有一个概念对无人值守的脚本很重要:幂等性。GET、HEAD、PUT 和 DELETE 按定义是幂等的,也就是重复发送同一个请求,服务端最终状态与只发一次相同,所以网络重试是安全的。POST 不幂等,重试一次可能就多创建了两条记录或者重复扣了一次款。curl 因此默认只重试幂等方法,这也是混合动词的脚本里用 --retry 通常没问题的原因。 最后是输出怎么看。默认情况下 curl 会在标准错误上画一个进度条,显示百分比、已下载和总字节数、当前速度以及预计剩余时间;一旦你把输出管道重定向或重定向到文件,进度条就消失了,--silent 则会彻底关掉它。-v 打印完整对话,小于号表示 curl 发出的内容,大于号表示收到的内容——请求行、每一个请求头、响应状态行、每一个响应头。-i 把响应头保留在正文里而不是丢弃,--fail 则让 curl 在遇到 4xx 或 5xx 时以非零状态码退出,方便脚本判断失败。
使用方法
- 在 Method 下拉框里选择接口需要的方法:GET、POST、PUT、PATCH、DELETE、HEAD 或 OPTIONS。下方命令会同步更新,GET 和 HEAD 不会输出多余的 -X。
- 把完整 URL 粘进 URL 输入框,别忘了协议头和查询串,例如 https://api.example.com/v1/items?page=2。
- 在 Authentication 区域点击 None、Basic 或 Bearer。选择 Basic 会展开用户名和密码两个输入框并生成 -u;选择 Bearer 会展开一个令牌输入框,并替你拼好 Authorization 请求头。
- 在 Headers 区域逐行编辑:用复选框决定某一行是否包含在命令中,填写 Header name 和 Header value,点右侧的 × 删除多余的行,或者用 + Add header 新增一行。
- 在 Request body 区域选择 No body、JSON、Form fields 或 Raw text。选了 JSON 或 Form fields 会自动补上对应的 Content-Type;如果你自己已经写了 Content-Type,工具不会再加一条。
- JSON 模式下勾选 Pretty-print 可以让请求体重新序列化时带缩进,不勾则原样保留你输入的内容;Form fields 会把每个 name=value 变成单独的 --data-urlencode 选项。
- 在 Command 代码块中查看完整命令,点 Copy 按钮把单行版本复制到剪贴板。拼装全在浏览器内完成,命令里的密码和令牌不会发送到任何地方。
计算示例
输入: GET https://api.example.com/v1/items?page=2,请求头 Accept: application/json
过程:
GET 是 curl 默认方法所以省略 -X,请求头用 -H 输出,URL 保留查询串结果: curl \
-H 'Accept: application/json' \
https://api.example.com/v1/items?page=2
输入: POST https://api.example.com/v1/items,JSON 请求体 {"name":"example","active":true},Bearer 令牌认证
过程:
JSON 请求体生成 -X POST 和 Content-Type,令牌变成 Authorization 头,请求体整体加单引号结果: curl \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOi...' \
--data-raw '{
"name": "example",
"active": true
}' \
https://api.example.com/v1/items
输入: POST https://api.example.com/login,Form fields 填 name=ada&password=secret,Basic 认证 ada:hunter2
过程:
Basic 认证转成 -u,每个表单字段转成独立的 --data-urlencode,并补上 urlencoded 类型结果: curl \
-H 'Content-Type: application/x-www-form-urlencoded' \
-u 'ada:hunter2' \
--data-urlencode 'name=ada' \
--data-urlencode 'password=secret' \
https://api.example.com/login
输入: DELETE https://api.example.com/v1/items/42,自定义请求头 X-Request-Id: 8f14e45f
过程:
DELETE 无请求体因此显式写 -X DELETE,自定义请求头加引号,不添加任何用户没要求的东西结果: curl \
-X DELETE \
-H 'X-Request-Id: 8f14e45f' \
https://api.example.com/v1/items/42
相关搜索
相关搜索:curl命令生成器, 生成curl命令, curl命令在线, curl请求头, curl基本认证, curl bearer令牌。
curl命令生成器生成curl命令curl命令在线curl请求头curl基本认证curl bearer令牌curl发送jsoncurl表单提交curl语法接口调试工具命令行http客户端shell引号规则curl教程api测试工具免费在线工具开发者工具curl命令模板http请求生成器
常见问题
为什么 GET 请求生成的命令里没有 -X?
因为一条不带选项的 curl 加 URL 本身就是 GET,再写 -X 属于纯粹的多余。HEAD 同理,它只取响应头。除非明确要求,否则方法由「有没有请求体」决定,因此工具对 GET 和 HEAD 省略 -X,而对 POST、PUT、PATCH、DELETE 和 OPTIONS 显式输出。如果遇到行为古怪、必须用非常规动词的接口,自己加一行自定义请求头,命令里就会出现。
我该用 -u 还是手写 Authorization 头?
两者产生的请求完全一致。-u 'user:pass' 只是把用户名密码做 Base64 编码再发送的简写,省去手工编码的麻烦。手写请求头只在几种情况下更合适:认证方案是自定义的、令牌里有你不愿直接写在命令行上的特殊字符、或者密码本身包含冒号——因为第一个冒号之后的所有内容都会被当作密码,这一点很容易让人困惑。
为什么 JSON 请求体必须放在单引号里?
因为 shell 会在 curl 拿到参数之前先解析整行命令,而没加引号的 JSON 里全是空格、花括号、引号和冒号,shell 会把它们当作语法处理。少了引号,请求体会被拆成好几个参数,curl 只会报一个莫名其妙的数据缺失错误。放进单引号后,每个字符都会原样传递,包括 JSON 自己需要的双引号。本工具会自动给所有不是纯字母数字安全字符的值加引号,所以生成的命令可以直接粘贴运行。
工具会自动添加 Content-Type 吗?
会,但仅限于你没有自己指定的情况。选择 JSON 请求体会补上 Content-Type: application/json,选择 Form fields 会补上 Content-Type: application/x-www-form-urlencoded。如果头部列表里已经有 Content-Type,工具会跳过自己那一条,避免同一个头出现两次且值互相冲突。发送 JSON 却不带 Content-Type 是 400 错误的常见原因:服务器会默认按表单编码解析,结果读不懂你的请求体。
在这里填真实的 Bearer 令牌或密码安全吗?
从不上传的角度看是安全的。命令由你浏览器标签页里的 JavaScript 生成,URL、凭证和请求头都不会离开你的机器,更不会到达我们的服务器:不存储、不记录,关掉标签页值就没了。但仍需保持正常警惕——输入到任何网页里的令牌都有可能被浏览器扩展读取,而粘进终端的命令会留在 shell 历史里,所以对外分享示例时请换成占位符。
怎么发送表单数据而不是 JSON?
在 Request body 区域选择 Form fields,每行写一个 name=value;写在同一行用 & 连接也可以,工具会自动拆分。每一对会变成一条 --data-urlencode 'name=value',Content-Type 也会被设为 application/x-www-form-urlencoded。如果某个字段值本身含有保留字符,请使用百分号编码而不是直接写 &,否则服务器收到的字段会被截断。
为什么加了请求体之后方法变成了 POST?
这是 curl 自身的行为:用 -d 或 --data-raw 附加数据而不写方法时,curl 默认按 POST 处理。这个生成器如实呈现而不是悄悄替你决定,所以当方法下拉框还停在 GET 而你又选了请求体时,你会看到 -X POST 自动出现。建议先把方法下拉框改成真正需要的那一个,或者事后再修正,否则本意是更新资源的一次请求会悄悄变成新建。