cURL 解析工具

在浏览器中运行,不上传任何内容

把 cURL 命令读成它实际发送的请求,并转换为 fetch、Python requests 或整洁的 bash。不会发送任何请求。

Command

No command yet

Paste a cURL command on the left, for example from your browser's developer tools (Network tab, right-click a request, Copy as cURL). Nothing is sent: the command is only read.
Ready
Ln 1, Col 1

什么是 cURL 命令?

cURL 是用来发送 HTTP 请求的命令行程序,而 cURL 命令是开发者之间分享请求最常用的方式。一行命令就包含了服务器收到的全部内容:-X 后面的方法、URL、每个 -H 后面的请求头,以及 -d 后面的请求体。

在 API 开发中,cURL 命令随处可见。API 文档用 cURL 展示示例,浏览器开发者工具可以对任何网络请求使用 Copy as cURL,bug 报告里也常常附上一条,方便准确复现问题。

curl 会补上命令中没有写明的部分请求内容,而这些正是最容易让人踩坑的地方。-d 会把 GET 变成 POST,并发送 Content-Type: application/x-www-form-urlencoded,所以没有设置 JSON Content-Type 的 JSON 请求体会以表单的形式到达服务器。多个 -d 选项会用 & 连接。-G 则会把数据移到查询字符串中,-u user:password 会变成 Basic 类型的 Authorization 头。解析工具会显示这些请求头,并标明是哪个选项添加的。

使用方法

  1. 1把命令粘贴到 Command 面板,或从 Examples 中选择一条。从 Chrome 或 Firefox 复制的命令可以直接使用,包括 Windows 上带 ^ 转义的 Copy as cURL (cmd),以及用反引号续行的 PowerShell 命令。
  2. 2在 Request 标签页查看请求:方法以及 curl 为什么使用它、拆分开的 URL、查询参数、请求头、请求体(JSON 会被美化显示,但不改变任何值),以及解析工具列出但不解释的选项。
  3. 3Request 标签页顶部的提示会指出值得注意的地方,例如以表单形式发送的 JSON 请求体。Show 或 F8 会把光标移到相关选项上。
  4. 4打开 Code 标签页,可以得到同一请求的 JavaScript fetch、Python requests 或整洁的多行 bash 命令,并复制使用。
  5. 5Tidy(Shift+Alt+F)会把编辑器中的命令改写为 bash,每行一个选项。Ctrl+Z 可以撤销。

问题排查

单引号未闭合,或双引号未闭合
某个引号打开后一直没有闭合,所以命令的剩余部分被当成了一个参数。在 bash 中,'…' 里面不能出现单引号;请写成 '\'' 或使用 $'…'。编辑器会标出引号开始的位置。
找不到 URL
所有参数都被读成了选项或选项的值。检查 URL 是否存在、是否落在未闭合的引号里,以及 -o 或 -u 这样的选项在 URL 之前是否有自己的值。
请求体看起来是 JSON,却以表单形式发送
不带 Content-Type 的 -d 会让 curl 发送 application/x-www-form-urlencoded。请加上 -H "Content-Type: application/json",或改用 --json,它会同时设置 Content-Type 和 Accept。
URL 中包含 [ ] 或 { }
curl 会把它们当作模式,为每个值各发送一次请求。加上 -g(--globoff)即可按原样发送。
这是 wget 命令,不是 curl
解析工具只支持 curl。从浏览器以 PowerShell 形式复制的命令使用的是 Invoke-WebRequest;请改为选择 Copy as cURL。

常见问题

我的命令会被发送到别处吗?

不会。命令在你的浏览器中解析,不会发出任何请求。这一点很重要,因为复制来的命令里常常带有真实的令牌和 Cookie。命令保存在当前标签页的 session storage 中,直到你清除它或关闭标签页;Copy link 会把它放在链接的 # 之后(从不发送给服务器),所以分享前请检查其中是否含有凭据。

解析工具能识别哪些 cURL 选项?

能识别会改变请求的选项:-X、-H、-d 及其变体(--data-raw、--data-binary、--data-urlencode)、--json、-F、-G、-I、-T、-u、-b、-A、-e、--oauth2-bearer、-L、-k、-m 和 --compressed。短选项可以组合,如 -sSL,也可以直接带值,如 -XPOST。其他选项会列出并说明作用,不认识的选项也会列出,而不是被丢弃。

我的命令没有 -X,为什么显示 POST?

只要命令带有请求体(-d、--json 或 -F)且没有显式指定方法,curl 就会发送 POST,解析工具遵循同样的规则。-G 会改用 GET 把数据作为查询字符串发送,-I 则发送 HEAD。

能读取用 @ 引用的文件吗,比如 -d @body.json?

不能。解析工具运行在浏览器中,无法读取你电脑上的文件,所以只会显示文件名并给出提示。用 --data-raw 粘贴文件内容即可查看请求体。

生成的代码有多准确?

方法、URL、请求头和请求体都完全相同,请求体会作为同一个字符串发送,不会重新编码。有些 curl 选项没有对应的写法:fetch 无法像 -k 那样跳过证书校验,浏览器也不允许 fetch 设置 Cookie 头。生成的代码会在相关位置用注释说明。除非命令带有 -L,Python 代码会传入 allow_redirects=False,因为 curl 默认不跟随重定向。