curl 转换器
开发将 curl 命令实时转换为 JavaScript fetch、axios、Python、Go、Java 与 HTTPie,多语言 Tab 切换。
不获取远程 URL;请直接粘贴你的 JSON。
本页内容
什么是 curl 转换器?#
curl 可以说是 HTTP 世界里最接近「通用语」的工具。浏览器开发者工具的「Copy as cURL」、API 文档里的示例、提bug时贴出来的请求,最后落到你手里的几乎都是一条 curl 命令。但麻烦也在这里:你贴到的这条命令,往往不能直接塞进自己的代码。你的服务用 Python 写,或者用 Go,或者在前端用 fetch;你并不想在程序里去 shell out 调 curl,你想要的是「等价的调用」,用你已经在用的那个 HTTP 客户端写出来。
本页就是用来填这道缝的。把 curl 命令贴在左边,它会先把这条命令的 shell 语法——各种 flag、引号、续行、请求头、请求体、认证信息——解析成一个结构化的请求模型,再一次性输出成六种目标代码:浏览器 fetch、axios、Python requests、Go net/http、Java HttpURLConnection,以及 httpie。你在六个标签页之间横向对照,复制符合自己技术栈的那一份,然后继续干活。
整个解析过程完全在你的浏览器里完成。你贴进去的命令不会发往任何服务器——这一点很关键,因为真实的 curl 命令里常常带着 bearer token、basic-auth 凭据,或者签好的 cookie。
如何使用#
- 把 curl 命令贴进左侧的 输入 框。开头那个
curl单词写不写都行,都能识别。跨行命令(用反斜杠\续行)可以照贴,终端里每个 flag 单独一行的写法也能正常解析。 - 想先看看长什么样,点 示例(Sample)载入一条接近真实场景的命令;点 清空(Clear)可清空输入框。
- 在输出区上方的标签栏选择目标语言:fetch、axios、python、go、java 或 httpie。六种代码是同一次解析的结果,切标签是瞬时完成的,不会重新跑一遍。
- 在面板里阅读生成的代码,点标签栏的 复制(Copy)取走。
- 留意两个输入框下方的状态栏。如果解析遇到了它不认识的 flag(比如输出重定向、代理设置),它会直接告诉你,而不是悄悄丢掉。
主要特性#
- 真正的 shell 分词器,不是正则硬抠。 单引号、双引号、ANSI-C 风格的
$'...'(含\n、\t、\x41、é等转义)、反斜杠续行,以及"a\b"与'a\b'的区别,都按bash的规则处理。那种靠空白切分的简陋转换器,一旦遇到带空格的请求头值就会出错。 - 一次解析出六份代码。
fetch、axios、Python、Go、Java、httpie并排展示。如果你在fetch和axios之间犹豫,两下点击就能对比它们对同一个 auth 头的处理差异。 - 对请求体有判断力。 当请求带
Content-Type: application/json时,Python 输出会用json=关键字,保证 dict 形态的请求体被正确编码;其他情况下退回data=。 - basic-auth 一次解码、各处到位。
-u user:pass在 fetch 里变成btoa("user:pass"),在 axios 里变成auth块,在 requests 里变成auth=元组,在 Go 里变成SetBasicAuth——每种语言都按它自己的惯例来。 - 不认识的 flag 会被报告,而非吞掉。
-o output.txt、--proxy这类会在状态栏里以unknown args形式列出,让你清楚知道某个重定向或代理是被有意识地略去,而不是丢失。 - 无后端、不外泄。 命令由本页自己的脚本在内存里分词,没有任何携带你 token 外出的网络请求。
实战示例#
点 示例(或者直接贴一段等价于浏览器「Copy as cURL」的 JSON POST 命令):
curl -X POST https://example.com/api/v1/users \
-H 'Authorization: Bearer tok' \
-H 'Content-Type: application/json' \
-d '{"name":"Alice","role":"admin"}'
切到 fetch 标签,得到:
const response = await fetch("https://example.com/api/v1/users", {
method: "POST",
headers: {
"Authorization": "Bearer tok",
"Content-Type": "application/json",
},
body: "{\"name\":\"Alice\",\"role\":\"admin\"}",
});
切到 python 标签。因为 Content-Type 是 JSON,请求体会走 json= 关键字:
import requests
url = 'https://example.com/api/v1/users'
headers = {
'Authorization': 'Bearer tok',
'Content-Type': 'application/json',
}
payload = '{"name":"Alice","role":"admin"}'
response = requests.request('POST', url, headers=headers, json=payload)
print(response.status_code)
同一条命令,在 go、java、axios、httpie 标签下也都已经生成好了——一次粘贴,六份转换。
常见问题#
提示「unknown args」是什么意思,它漏掉了什么?#
解析器建模的是那些用来描述一个请求的 curl flag——方法、URL、请求头、请求体、basic-auth、--compressed、-k、-L。而用来描述 curl 自身行为的 flag(比如把响应体写入文件的 -o、--proxy、--connect-timeout、--cert)不会被翻译,因为它们在 fetch 调用里根本没有对应物。这些 flag 会被收集起来显示在状态栏,让你明确知道它们是被有意略去的,而不是凭空消失。
支持 $'...' 这种 ANSI-C 引号的命令吗?#
支持。从终端复制出来的请求头或请求体有时会被包在 $'...' 里,以便让 \n、\t 这类转义由 shell 解释。分词器理解 ANSI-C 引号,并会解码 \n、\t、\xHH、\uHHHH、\UHHHHHHHH 以及常见简单转义,因此转换器看到的字节和 curl 真正会发出去的字节是一致的。
为什么 Python 输出有时用 json=,有时用 data=?#
取决于你的请求头。当存在 Content-Type: application/json 时,请求体会走 json= 关键字,由 requests 负责设置请求头并正确编码;对于其他内容类型(表单编码、纯文本、multipart),则退回 data=——因为强行套 json= 反而是错的。
它会替我真正发出这个请求吗?#
不会,这是有意为之。本工具只负责把命令翻译成代码,从不执行它。生成的代码片段要在你自己的程序里、用你自己的凭据运行,你可以在它真正打到线上之前先看一眼。