cURL 转 JavaScript — 把 cURL 命令转换为 JavaScript 代码
把 cURL 命令转换为 JavaScript fetch() 调用。浏览器和 Node.js 双版本可用,全部在浏览器中完成。无上传、无账号、无限制。
cURL to JavaScript
Convert cURL commands to JavaScript fetch code. Works entirely in your browser — no uploads.
cURL 转 JavaScript 是这一系列转换器里使用最频繁的一个,因为 JavaScript 是唯一原生运行在每个浏览器中的语言,也是「我就想临时测一下这个 API」这类脚本最常见的目标。cURL 命令是「这就是发起这个 HTTP 请求的方法」的通用语 —— 从 DevTools 导出、从 API 文档里复制、从 shell 历史里粘贴 —— 而转成 JavaScript 是从「我在终端里看到了这条请求」到「我能在浏览器控制台或 Node.js REPL 里直接跑」之间最短的路径。fetch() API 是两种运行时的现代标准,本工具的输出就是一个可以粘到任何地方的 async 函数。
cURL 转 JavaScript 中「不那么显然」的一点是运行时的差异。同一个 fetch(url, options) 调用在浏览器和 Node.js 中都能跑,但周边代码不同:浏览器自带 fetch(无需 import),而 Node.js 需要 undici 包,或依赖 Node 18+ 内置的 fetch。工具的运行时切换器在这两种模式之间切换 —— 浏览器输出只是把 fetch 调用包在一个 async 函数里,Node.js 输出则加上 import 或直接使用全局 fetch。两种输出都简洁且符合惯用写法,无需任何第三方依赖。
最终的交接:如果目标是在浏览器控制台里做一次临时测试,直接复制浏览器运行时输出粘进去即可。如果目标是 Node.js 脚本,复制 Node.js 输出再加上必要的 import。如果目标是生产代码路径,这里的输出只是一个起点 —— 给非 2xx 状态码加上错误处理,如果接口返回 JSON 就加 response.json() 解析,并考虑在长时间运行的页面或脚本中使用 AbortController 来取消请求。本工具能在几秒钟内给你一个能跑的基线;生产环境的硬化是下一步的工作。
使用方法
粘贴一条 cURL 命令
从浏览器 DevTools(Network 标签 > Copy as cURL)、文档页面或 shell 历史记录里复制一条 cURL 命令。解析器能处理 `-H`、`-d`、`-X`、`-u`、`--cookie` 等常见标志。
选择运行时
在浏览器 fetch API(适用于任何现代浏览器,无需依赖)和带 `node-fetch` 或 `undici` 包的 Node.js(用于服务端)之间选择。两种情况下的输出都是同一个 `fetch(url, options)` 调用。
自定义输出
默认输出是带单一响应处理器的 async/await。可以切换选项添加 response.json() 解析、对非 2xx 状态码的错误处理,或把调用包在立即调用的函数表达式(IIFE)中。
常见问题
我该选哪个运行时?
浏览器 fetch 适合任何客户端代码(React 组件、Vue 应用、原生 JS 页面)。Node.js fetch 适合服务端代码、脚本和 CLI 工具。fetch API 的形态完全一致,只有周边代码(import、顶层 await)有所不同。
兼容老版本的 XMLHttpRequest API 吗?
不 —— 输出使用 `fetch()`,这是现代标准。需要 `XMLHttpRequest` 的遗留代码需要自行改造输出。fetch API 自 2015 年起在所有浏览器中受支持,自 Node.js v18 起在 Node.js 中受支持。
headers 是如何传给 fetch 的?
cURL `-H` 标志里的标头会变成 fetch options 中的一个 `headers` 对象:`headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ...' }`。当存在请求体时,Content-Type 会自动设置。
Cookie 和认证怎么办?
`-b 'name=value'` 会变成一条 `Cookie` 标头。`-u 'user:pass'` 会变成 basic-auth 标头。服务器设置的 Cookie 在浏览器 fetch 中由浏览器自动存储;在 Node.js 中则需要借助 `cookie` 包显式添加 `Cookie` 标头。
生成的代码会处理错误吗?
默认输出是一条不带错误处理的 `fetch()` 调用。切换「包含错误处理」选项可以把调用包在 try/catch 里,在非 2xx 状态码时抛错,并由辅助函数读取响应体内容作为错误消息。
限制说明
- 不支持流式响应输出用 `response.json()` 处理响应体,会把整个响应体加载到内存里。对于流式响应(server-sent events、chunked transfer),请直接使用底层的 `response.body` ReadableStream 配合自定义读取器。
- 不会自动解析 JSON默认输出不会调用 `response.json()`。可以切换选项添加该调用,或者自己在代码里手动加。不加的话,响应就是一个 `Response` 对象,需要自行选择 `.text()`、`.json()` 或 `.blob()`。
- Multipart 上传需要手动处理支持 multipart 表单上传(`-F`),但需要在 JavaScript 中构造一个 `FormData` 对象。输出会生成 FormData 的初始化代码;文件上传部分需要自行添加文件引用(`formData.append('file', fileInput.files[0])`)。
平台说明
- macOS
- Safari、Chrome 和 Firefox 中的浏览器 fetch 无需任何配置即可使用。对于 Node.js 脚本,Node 18+ 内置了 fetch;更早版本需要 `npm install node-fetch` 并加上一行 `require()`,工具不会自动添加。
- Windows
- Edge、Chrome 和 Firefox 中的浏览器 fetch 无需任何配置即可使用。在 Windows 终端里跑 Node.js 脚本时,fetch 的 import 和顶层 await 行为与 Linux、macOS 一致 —— 没有平台特有的坑。
- Linux
- Linux 上的每个浏览器都支持浏览器 fetch。对于 Node.js 脚本,工具输出标准的 `fetch()` 调用。Node 16 和 17 上的服务端 fetch 需要 `--experimental-fetch` 标志,Node 18+ 则开箱即用。
- CLI
- 驱动本工具的同一个库也作为 `curlconverter` 包发布在 npm 上,并提供 `curlconverter --language javascript` 的 CLI 模式。适合嵌入构建脚本,或批量转换保存下来的 cURL 命令。
- Web
- 完全在客户端运行。页面加载完成后即可离线使用。生成的 JavaScript 可移植 —— 粘到任何浏览器的 script 标签、Node.js module 或 serverless 函数处理器里都能跑。