ToolConvoyToolConvoyv2.6
DEV

cURL 转 Go — 把 cURL 命令转换为 Go HTTP 代码

把 cURL 命令转换为使用 net/http 的 Go 代码。解析请求头、Cookie 和请求体,全部在浏览器中完成。无上传、无限制。

● 本地运行 · 在您的标签页中生成页面加载以来工具发出的网络请求:0 次

cURL to Go

Convert cURL commands to Go HTTP code. Works entirely in your browser — no uploads.

cURL 转 Go 是本工具箱中三个 cURL 转语言转换器之一,当目标是 Go 服务、CLI 工具或无服务器函数时,Go 版本就是正确的选择。Go 的 net/http 是主流语言里相对啰嗦的 HTTP 客户端 —— 同一条 cURL 命令在 Python 中是 5 行 requests 代码,到 Go 就变成 15 行 —— 但啰嗦换来的是零依赖、强类型系统,以及能在编译期捕获 bug 的静态分析能力。对于长期运行的服务来说,啰嗦是特性,不是缺陷。

cURL 转 Go 中「不那么显然」的一点是 cURL 各个标志位实际映射到了什么。这里的解析器与本工具箱的 Python 和 JavaScript 转换器共用同一个 curlconverter 库,Go 输出遵循 Go 的惯用模式:标头变成 http.Header map,请求体变成 strings.NewReader,Basic Auth 变成 req.SetBasicAuth,Cookie 变成原始标头条目。生成的代码可针对任意 Go 1.18+ 工具链编译,无需 go get 任何外部包。对于已经在用第三方 HTTP 客户端(resty、gentleman、gorequest)的项目来说,这里的输出是一个起点,你可以按项目风格自行调整。

最终的交接:如果目标是在 Go 服务里测试某个 API,把生成的代码粘贴到一个函数里,再按你的上下文补上合适的错误处理 —— 输出用的是 if err != nil 检查,但没有添加 context(fmt.Errorf("...: %w", err))或结构化日志。如果目标是一次性脚本,输出直接用就够了。如果目标是长期运行的客户端,重构变量名,加上超时,并考虑把 http.Client 包进一个自定义 struct,对外暴露你的服务实际用到的 API 方法。

广告

使用方法

  1. 粘贴一条 cURL 命令

    从浏览器 DevTools(Network 标签 > Copy as cURL)、文档页面或你的 shell 历史记录里复制一条 cURL 命令。解析器能处理 `-H`、`-d`、`-X`、`-u`、`--cookie` 等常见标志。

  2. 查看生成的 Go 代码

    输出使用 Go 标准库的 `net/http` 包 —— 无第三方依赖。请求头变成 `http.Header` map 条目,请求体变成 `strings.NewReader`,请求通过 `http.Client.Do()` 发出。

  3. 调整变量名

    工具会用默认变量名(`req`、`client`、`resp`)。点击输出里的任意名字就能重命名。输出是一段自包含的代码片段,可以直接粘贴到 Go 文件里。

常见问题

会用到第三方包吗?

不会 —— 生成的代码只用 Go 标准库:`net/http`、`strings`、`io`、`fmt` 和 `os`。无需在 go.mod 里加依赖,无需 vendor 任何外部包,也不用关心版本固定的问题。

请求体是怎么处理的?

`-d` 和 `--data` 标志会生成 `strings.NewReader(body)` 作为请求体。JSON 请求体会出于安全性包一层 `bytes.NewReader([]byte(body))`。表单编码的请求体保持原样,因为 Go 的 http 库原生就能处理。

Cookie 和认证怎么办?

`-b 'name=value'` 会变成一条 `Cookie` 标头条目。`-u 'user:pass'` 会通过 `req.SetBasicAuth` 设置一个 basic-auth 标头。`-H 'Cookie: ...'` 按原始标头保留 —— 这是从 DevTools 复制 cURL 时的输出形式。

生成的代码能编译过吗?

能 —— 输出是合法 Go 代码,可在任意 Go 1.18+ 工具链上编译。错误处理采用惯用的 `if err != nil` 模式。响应体会读成字符串后打印出来;生产代码应当加上带 context 的错误处理。

能生成复杂 multipart 上传的代码吗?

支持 multipart 上传(`-F`),但输出会更啰嗦,因为 Go 的 `mime/multipart` 包需要一个 `Writer` 来构建表单。生成的代码是对的,但不如 cURL 转 Python 或 cURL 转 JS 输出的那么紧凑。

限制说明

  • 仅使用标准库生成的代码使用 `net/http`。如果想要更顺手的 API,转换完成后再换到第三方库(比如 `resty` 或 `gentleman`)。工具给的是一个可运行的基线;生产用可以再借助库把代码写短。
  • 没有自动重试生成的 `http.Client` 没有超时、没有重试策略,也没有连接池调优。生产代码应当用带超时的 context 包装 client,并加上适配目标 API 的重试策略。
  • Multipart 上传更冗长Multipart 表单上传(`-F file=@path`)生成的 Go 代码比等价的 Python 或 JavaScript 长,因为 Go 的 `mime/multipart` 包要显式设置 writer。代码能跑,但片段的可读性不如简单请求。

平台说明

macOS
生成的代码使用了 `any` 类型,要求 Go 1.18+。装最新的 Go 版本最稳 —— 通过 Homebrew(`brew install go`)安装,或者去 go.dev 下载 .pkg 安装包。
Windows
需要 Go 1.18+。go.dev 的 Windows 安装包会自动设置 GOPATH,并把 `go` 加到 PATH 里。生成的代码在任何 Go workspace 里都能跑,无需项目级配置。
Linux
需要 Go 1.18+。大多数发行版的默认仓库里 Go 都比较旧;从 go.dev 下载官方 .tar.gz,或者用版本管理器(g、gvm)来获得较新的工具链。
CLI
驱动本工具的同一个库也作为 `curlconverter` 包发布在 npm 上,并提供 `curlconverter --language go` 的 CLI 模式。适合嵌入到构建脚本里,或批量转换保存下来的 cURL 命令。
Web
完全在客户端运行。页面加载完后离线可用。生成的 Go 代码可移植 —— 粘到任意 Go module 里,跑一句 `go run main.go`,就是一个能用的 HTTP 客户端。
广告

相关工具

广告