ZeroTool Workbench
cURL 转代码工具
将 cURL 命令即时转换为 Python requests、JavaScript fetch、Go net/http、PHP curl 和 Node.js axios 代码。无需注册,完全在浏览器中运行。
使用方法
- 将你的 cURL 命令粘贴到左侧输入框。
- 点击 转换。
- 选择目标语言标签(Python、JavaScript、Go、PHP 或 Node.js)。
- 点击 复制复制生成的代码。
常见使用场景
- 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-urlencode | name=content、=content、content 做 URL 编码(空格写成 +) |
--json | 请求体、Content-Type: application/json、Accept: application/json、POST;多个直接拼接、不加 & |
-G、--get | 数据放进查询串,方法为 GET |
-F、--form | multipart 请求体:name=value、name=@file(上传文件,支持 ;type= 与 ;filename=)、name=<file(文件内容作为字段值)。Content-Type 及其分隔符由库写出 |
-u user:password | Authorization: Basic … 请求头(alice:s3cret → Basic YWxpY2U6czNjcmV0) |
--oauth2-bearer、-A、-e、-b name=value | Authorization: Bearer、User-Agent、Referer、Cookie 请求头 |
-I、--head | HEAD 请求 |
-L | 跟随重定向;不加时代码不跟随 |
--url、--url-query | URL 与查询串;没有协议的 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 命令可以直接粘贴,转换器会正确处理换行符。