piapia123
zh

cURL 工具箱

网络

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

一条 curl 命令,三种看法:转代码(curl → 七种语言的请求代码)、解析(curl → 方法、地址、查询参数、请求头、请求体逐项列出)、构建(一份 HTTP 请求文本 → curl 命令)。 为什么三个方向在一个工具里:它们本来就是连着做的 —— 从浏览器「Copy as cURL」拿到命令 → 解析看清它到底发了什么 → 转成代码;反过来,手写一份请求 → 构建出 curl → 粘回解析核对。分成三个页面意味着每换一次视角都要重贴一次内容。 转代码支持七种目标:JavaScript 的 fetch、Node.js 的 node:https、Python 的 requests、Python 爬虫框架 feapder、PHP 的 cURL、Go 的 net/http、Java 的 HttpClient。从开发者工具里「Copy as cURL」出来的多行命令可以直接粘 —— 单引号、双引号里的转义、反斜杠续行都按 shell 的规则解析,而不是按空格切开(那样会把 -d '{"a": 1}' 里的空格也当成参数分隔)。命令里那些对生成代码没有影响的选项(--retry、--connect-timeout 之类)会以注释列在代码最前面,你一眼能看出自己少了什么。 解析除了列出字段,还会做两件别处不会做的事:`-u` 的口令打码显示(这块结果会被截图、会被共享屏幕),`-k`(跳过证书校验)单独一条红色横幅而不是混在选项列表里 —— 它不是「一个选项」,它是「这次请求不验证对端身份」。 构建用的是一种文本格式而不是表单:第一行写「方法 地址」(方法可省,省了就是 GET),空行之前是请求头,空行之后是请求体。这不是我发明的 —— VS Code 的 REST Client 与 JetBrains 的 HTTP Client 都用它。不做表单是因为表单填不了任意请求体,而请求体恰恰是最需要复制粘贴的那部分。

功能

  • 七种目标:JavaScript (fetch)、Node.js (node:https)、Python (requests)、feapder、PHP (cURL)、Go (net/http)、Java (HttpClient)
  • 三个方向共用一个输入框:转代码、解析成字段表、反向构建
  • 按 shell 规则解析:单引号、双引号转义、反斜杠续行都认
  • 支持 -X、-H、-d / --data-raw、-F 表单、-u 认证、-b cookie、-A / -e 等选项
  • -G 会把数据拼到查询串上而不是当请求体,与 curl 的行为一致
  • 短选项连写(-sSL)与 --opt=value 两种写法都认
  • 不认识的选项以注释列在代码开头,不会悄悄丢掉
  • 解析:方法、地址、查询参数、请求头、请求体逐项列出;请求体是 JSON 就缩进展开
  • 解析:-u 的口令打码显示,命令里的明文口令不会再出现在结果里
  • 解析:-k 跳过证书校验时单独给一条横幅警示,不混在普通选项里
  • 构建:第一行「方法 地址」,空行之后是请求体(VS Code REST Client 的 .http 格式)
  • 构建:单引号按 shell 规则转义(`'\''`),请求体里带撇号也不会把命令截断
  • 长字符串可按 80 / 100 / 120 列折行,用该语言的拼接符连起来(PHP 用 . 其余用 +);折行只动写法不改内容,且避开转义序列与注释

使用方法

  1. 选方向:转代码、解析,还是构建
  2. 转代码:从终端或浏览器开发者工具复制 curl 命令,粘进来,选目标语言
  3. 解析:粘 curl 命令,逐项看清它到底发了什么
  4. 构建:第一行写「方法 地址」,接着写请求头,空一行后写请求体
  5. 代码行太长的话,把「长字符串按行拼接」设成 80 或 100 列
  6. 代码开头的注释会说明哪些选项被忽略了
  7. 复制结果直接用

常见问题

为什么要自己解析而不是按空格切开?
因为 curl 命令是 shell 命令行,不是一行用空格分开的字符串。-d '{"a": 1}' 里的空格属于数据,-H "X: a\"b" 里的引号要转义。按空格切会把参数切错,而切错的结果是一段看起来完全正常、发出去却不对的代码 —— 这类错误最难发现。
为什么生成的代码里有一些注释?
那些是原命令里有、但生成的代码无法直接表达的东西:-k 忽略证书校验、-L 跟随重定向,以及 --retry、--connect-timeout 这类对「生成一段请求代码」没有影响的选项。列出来是为了让你知道这份代码与原命令的差别,而不是让它悄悄少点什么。
支持 cookie 和 Basic 认证吗?
支持。-b 的 cookie 会按分号拆开写进请求头,-u user:pass 会转成各语言自己的认证写法(Python 的 auth 参数、Go 的 SetBasicAuth 等),而不是手工拼一个 Base64 的 Authorization 头。
「长字符串按行拼接」会改我的数据吗?
不会。它只改字符串的写法,不改内容:一段 300 字的地址会被拆成几段,中间用该语言的拼接符连起来(PHP 用 `.`、其余六种用 `+`),拼回去与原来逐字相同 —— 这一点有测试钉着。两处刻意避开的地方:不会把转义序列切开(`\"` 被拆成 `\` 与 `"` 会让产物变成语法错误),也不会去拆注释里的引号(顶部那些说明里就有引号,把它们当成字符串去折行会毁掉注释)。所以它只在你确实要把它贴进有行宽限制的代码时才需要打开。
命令会被上传吗?
不会。解析与生成全在浏览器里完成,页面不发送任何请求 —— curl 命令里常常带着 Authorization 头和令牌,它们不会离开这台设备。
「构建」为什么用文本格式,而不是一个填表的表单?
因为表单填不了任意请求体,而请求体恰恰是最需要复制粘贴的那部分。文本格式是:第一行「方法 地址」(方法可省,省了就是 GET),空行之前是请求头,空行之后是请求体 —— 这是 VS Code 的 REST Client 与 JetBrains 的 HTTP Client 都在用的 `.http` 约定,不是这里新造的。它还有个附带好处:可以直接从文档、工单、同事的消息里整段粘过来。
构建出来的命令为什么是多行的?
两处会出现换行。一是每个选项前面都有反斜杠续行(行尾一个反斜杠,下一行接着写),这是为了让人能读,粘进终端或脚本里完全合法。二是请求体里的换行会原样保留在单引号内 —— shell 允许单引号跨行,curl 也照收,所以内容不会被改动一个字;但如果要把结果贴进一个只读单行的输入框,得先自己合并成一行。把请求体压成一行会改变数据(JSON 里的换行虽不影响语义,但签名、纯文本、表单的就不一定),所以这里选择保真。
解析结果里为什么把 -u 的口令打码了?
因为这块结果会被截图、会被放到共享屏幕上、会留在浏览器的会话里 —— 用户自己粘进来的东西不代表它就该在屏幕上再显示一遍。口令本身不参与任何转换(真正起作用的是 curl 会把它 Base64 之后放进 Authorization 头这一点,工具会把这句提示写在旁边),所以打码不影响你看到的信息。顺带一句:Basic 认证的 Base64 不是加密,等价于明文,走 HTTP 就等于把口令公开广播。

相关工具