ZeroTool Workbench

cURL 转代码工具

将 cURL 命令即时转换为 Python requests、JavaScript fetch、Go net/http、PHP curl 和 Node.js axios 代码。无需注册,完全在浏览器中运行。

100% 浏览器端运行 数据不离开你的设备 免费 · 无需注册
cURL Command
Generated Code

使用方法

  1. 将你的 cURL 命令粘贴到左侧输入框。
  2. 点击 转换。
  3. 选择目标语言标签(Python、JavaScript、Go、PHP 或 Node.js)。
  4. 点击 复制复制生成的代码。

常见使用场景

  • API 集成:将文档中的 cURL 示例转换为你偏好的编程语言。
  • 调试:从浏览器开发者工具复制失败请求的 cURL 命令,转换为代码进行测试。
  • 团队协作:帮助不熟悉 cURL 的队友理解请求内容。
  • 快速开发:无需手写样板代码,快速搭建 HTTP 调用。

示例:JSON POST 请求

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer TOKEN" \
  -d '{"name": "Alice", "email": "[email protected]"}'

Python 输出:

import requests

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer TOKEN",
}

data = "{\"name\": \"Alice\", \"email\": \"[email protected]\"}"

response = requests.post(
    "https://api.example.com/users",
    headers=headers,
    data=data,
    allow_redirects=False,
)
print(response.text)

Go 输出:

package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader("{\"name\": \"Alice\", \"email\": \"[email protected]\"}")
	req, err := http.NewRequest("POST", "https://api.example.com/users", body)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Add("Content-Type", "application/json")
	req.Header.Add("Authorization", "Bearer TOKEN")

	client := &http.Client{
		CheckRedirect: func(req *http.Request, via []*http.Request) error {
			return http.ErrUseLastResponse
		},
	}
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	respBody, err := io.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(respBody))
}

请求体就是你写的字符串,服务器收到的字节与 curl 相同。之所以有 allow_redirects=False 和 http.ErrUseLastResponse,是因为 curl 不加 -L 时不跟随重定向,而 requests 和 Go 的 http.Client 默认跟随。Go 代码遇到任何错误都用 log.Fatal 停下,不丢弃错误。

代码如何验证

工具的测试把每条示例命令向本地 HTTP 服务器各发两次:一次用真实的 curl,一次用生成的 Python、Go、JavaScript 代码。服务器比对方法、路径与查询串、请求头和请求体;multipart 请求体的分隔符是随机的,所以按段比对。Node.js 输出用 node --check 按 ES 模块检查。示例覆盖多个 -d、-G、--json、--data-urlencode、-F 文件上传、-d @file、Basic 认证、HEAD、带与不带 -L 的重定向,以及 Chrome 写出的 $'...' 引号。

参数如何转换

规则按 curl 手册:

curl生成的代码
-X、--request请求方法;不写时,带数据的请求为 POST
-H、--header请求头,名称和值不变;Name; 发送空值
-d、--data、--data-ascii、--data-raw、--data-binary请求体。多个用 & 连接。没有 Content-Type 头时加上 Content-Type: application/x-www-form-urlencoded,与 curl 发送的一致
-d @file、--data-binary @file代码读取该文件;-d 会去掉 CR 和 LF,与 curl 一致
--data-urlencodename=content、=content、content 做 URL 编码(空格写成 +)
--json请求体、Content-Type: application/json、Accept: application/json、POST;多个直接拼接、不加 &
-G、--get数据放进查询串,方法为 GET
-F、--formmultipart 请求体:name=value、name=@file(上传文件,支持 ;type= 与 ;filename=)、name=<file(文件内容作为字段值)。Content-Type 及其分隔符由库写出
-u user:passwordAuthorization: Basic … 请求头(alice:s3cret → Basic YWxpY2U6czNjcmV0)
--oauth2-bearer、-A、-e、-b name=valueAuthorization: Bearer、User-Agent、Referer、Cookie 请求头
-I、--headHEAD 请求
-L跟随重定向;不加时代码不跟随
--url、--url-queryURL 与查询串;没有协议的 URL 补 http://,与 curl 的默认一致
-s、-S、-v、-i、-o、-w、--compressed省略:它们只影响 curl 的输出或保存
其他选项,以及 -k列在代码顶部的注释和状态栏里。加了 -k 时代码仍校验 TLS 证书

选项可以合写(-sSL),也可以把值紧贴在后面(-XPUT、-H'X: 1')。curl 8.7 没有的选项会报错,不会被当成 URL。

运行前请检查

  • JavaScript(fetch) 运行在网页里,网页不能打开本地路径。上传的文件和 @file 请求体取自 <input type="file">,按注释列出的顺序选择。fetch 还会跟随重定向,浏览器也会去掉 Cookie、Host 等禁止设置的请求头。
  • JavaScript 页签里 name=<file 的文本以 CRLF 换行发送:FormData 按 HTML 表单编码规则统一文本值的换行。Python、Go、PHP、Node.js 原样发送文件内容。
  • Node.js 使用 axios,遇到 4xx、5xx 响应会抛出异常,curl 不会。maxRedirects: 0 对应不加 -L 的 curl,所以 3xx 响应也会抛出。文件上传用 fs.openAsBlob,需要 Node.js 19.8 及以上。
  • PHP 中同名的多个 -F 字段只发送一次,因为 PHP 数组每个键只保留一个值。
  • $VAR、$(...)、管道等 shell 语法不展开:"$TOKEN" 保持为字面文字 $TOKEN。

从浏览器复制请求

在 Chrome 或 Edge 开发者工具的 Network 面板中右键一个请求,选择 Copy → Copy as cURL (bash)。值里有引号或换行时,这个版本会用 $'...' 引号,转换器能读取。在 Windows 上也请选 bash 版本:cmd 版本使用 ^ 转义,本转换器不读取。这样复制的请求常含 Cookie 和令牌;本页不加载统计与广告,转换在浏览器中完成。

FAQ

支持哪些 cURL 参数?

读取 curl 8.7 的全部选项。会转换的有:-X、-H、-d / --data / --data-raw / --data-binary / --data-ascii / --data-urlencode、--json、-G、-F / --form-string(含文件上传)、-u、--oauth2-bearer、-A、-e、-b、-I、-L、--url、--url-query。只影响 curl 输出的选项(-s、-v、-o、-i、--compressed)直接省略;其他选项列在代码顶部的注释里。

我的 cURL 命令会发送到服务器吗?

不会。所有解析和代码生成均在浏览器中通过 JavaScript 完成。你的 cURL 命令及其中包含的密钥不会离开你的设备。

为什么生成的代码使用 await?

JavaScript (fetch) 代码可在浏览器控制台和 ES 模块里运行。Node.js 代码是 ES 模块(import axios from 'axios'),允许顶层 await;请存为 .mjs 文件,或放在 package.json 设了 "type": "module" 的项目里。

如何处理 Basic Auth 凭证?

-u user:password 转为 Authorization: Basic 请求头,内容是 user:password 的 UTF-8 字节的 Base64,与 curl 发送的一致。不带冒号时 curl 会提示输入密码,所以 -u user 列为未转换。

支持多行 cURL 命令吗?

完全支持。使用反斜杠换行续写的多行 cURL 命令可以直接粘贴,转换器会正确处理换行符。