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 用 . 其余用 +);折行只动写法不改内容,且避开转义序列与注释
使用方法
- 选方向:转代码、解析,还是构建
- 转代码:从终端或浏览器开发者工具复制 curl 命令,粘进来,选目标语言
- 解析:粘 curl 命令,逐项看清它到底发了什么
- 构建:第一行写「方法 地址」,接着写请求头,空一行后写请求体
- 代码行太长的话,把「长字符串按行拼接」设成 80 或 100 列
- 代码开头的注释会说明哪些选项被忽略了
- 复制结果直接用
常见问题
- 为什么要自己解析而不是按空格切开?
- 因为 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 就等于把口令公开广播。
相关工具
URL 解析
网络在线 URL 解析:拆出协议、主机、端口、路径、查询参数与锚点,参数逐个解码并与原始值对照,缺协议自动补 https://。全部在浏览器本地完成。
JSON 转代码
格式化把 JSON 样本转成 TypeScript interface、Go struct、Java class 或 Rust struct:不齐的键标成可选、类型冲突退化为联合类型。全程在浏览器本地生成。
正则测试
文本浏览器里调试正则:匹配实时高亮、捕获组、替换预览,并挡住灾难性回溯;调好可生成 JavaScript、Python、Java、Go、PHP 代码,反向引用按语言转换。
UA 解析
网络在线 User-Agent 解析:识别浏览器、版本、操作系统、设备类型与渲染引擎,并列出命中的匹配规则。结果基于模式匹配,仅供参考。全部在浏览器本地完成。
HTTP 状态码
网络HTTP 状态码查询与速查:输入编号查含义、1xx 到 5xx 分类、常见场景与排查提示,也能用关键词反查编号。全部在浏览器本地完成。
MIME 类型
网络MIME 类型与扩展名双向查询:输入 js 得到 text/javascript,输入 image/svg+xml 得到默认扩展名。附数据来源与覆盖范围,全部本地完成。