PAGE LOAD / LIVEcURL转fetch · 免费在线curl转JavaScript fetch加载中
cURL 转 fetch · 免费在线 curl 转 JavaScript fetch · 工具说明与使用指南

cURL 转 fetch · 免费在线 curl 转 JavaScript fetch

免费在线 cURL 转 fetch 工具,把 curl 命令一键转成原生 fetch 代码,零依赖、浏览器和 Node 18+ 都能直接跑。生成结果是 await 风格:method、headers、body 组成配置对象,末尾用 await res.json() 取数据——fetch 不像 axios 会自动解析 JSON,这一步必须手动写。纯浏览器本地转换,不上传、免登录。

使用步骤

  1. 粘贴 curl 命令(本页已自动预选 fetch)。
  2. 检查「已忽略参数」提示。
  3. 复制生成的 fetch 代码到 async 函数或顶层 await 环境中。
  4. 按需补 res.ok 判断与超时控制。

常见问题

为什么要写 await res.json()?
因为 fetch 返回的是 Response 对象而不是解析好的数据,必须再调一次 .json()(或 .text()/.blob())才能拿到内容,且这一步也是异步的。axios 则在内部就完成了解析,直接 res.data 即可。两者的这个差别是迁移代码时最容易漏的地方。
HTTP 404 或 500 会抛异常吗?
不会。fetch 只在网络层失败(断网、DNS 失败、CORS 被拦)时 reject,服务端返回 4xx/5xx 时 Promise 依然 resolve,res.ok 为 false。所以必须自己加 if (!res.ok) throw new Error(res.status) 之类的判断,否则错误响应会被当成正常数据继续往下走。
基础认证(-u)为什么是占位符?
因为 fetch 没有对应的配置项,只能自己拼 Authorization: Basic 头,值是 base64 编码后的 user:pass。浏览器端用 btoa("user:pass"),Node 端用 Buffer.from("user:pass").toString("base64")。生成结果留了占位提示,请替换成实际编码值或调用。
在浏览器里跑会不会被 CORS 拦?
会。fetch 受同源策略约束,目标服务没返回相应的 Access-Control-Allow-Origin 就会失败,而 curl 在命令行不受此限制——同一条命令 curl 通、浏览器不通是正常现象。需要带 Cookie 跨域还要加 credentials: "include",且服务端必须允许凭据。这类调试放到 Node 端跑更省事。
怎么给 fetch 加超时?
fetch 没有 timeout 选项,curl 的 --max-time 也不会转过来。现代环境用 signal: AbortSignal.timeout(10000) 最简洁;需要兼容旧环境则手工 new AbortController(),用 setTimeout 调 controller.abort() 并把 controller.signal 传进配置。

cURL 转其它代码