Menu

cURL 转换器

将任意 curl 命令转换为 fetch、axios、Python requests、Go、PHP 等代码。

作者 Nethanel Bar, Co-founder & CEO

最后更新

准备好真正学会编程了吗?

Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。

cURL 转换器是什么?

cURL 转换器把 curl 命令(各种 API 文档、Postman 导出和 AI 助手都会给出的格式)转换成可直接粘贴的代码,用的是你真正在用的编程语言。请求头、查询字符串、JSON 请求体、multipart 上传、Basic 认证和 Cookie 都会完整保留,你不用再手动改写请求。

curl 是描述 HTTP 请求的通用方式,但在生产环境里你很少真的“运行” curl。你运行的是 JavaScript 的 fetch、Python 的 requests、Go 的 net/http,或你的技术栈所用的其他库。这个工具正好填补这个空隙:粘贴 curl,点一个标签页,复制代码。

所有处理都在你的浏览器本地进行。你的 curl 命令、请求头和令牌都不会离开你的电脑,粘贴带有真实 Bearer 令牌或会话 Cookie 的命令时,这一点很有用。

转换时你会学到什么

  • curl 的参数在每个 HTTP 客户端里都对应特定的概念:-H 是请求头,-d 是请求体,-X 是请求方法,-u 是 Basic 认证,-F 是 multipart 表单字段。
  • 如果 curl 看到请求体(-d、--data、-F)却没有 -X,就会默认使用 POST。大多数客户端的默认行为也一样,所以没写 -X 时,输出里仍然是 POST。
  • JSON 请求体和表单请求体不一样。Content-Type: application/json 表示请求体按原样发送,application/x-www-form-urlencoded 表示键值对用 & 连接。
  • -G 会把请求体提升为 GET 请求的查询字符串。输出会体现这一点:你会看到 params / query 被填充,而不会发送请求体。

一步步把 curl 转换成代码

  1. 粘贴你的 curl 命令

    把完整的命令放进输入框,从文档里复制来的 \ 换行续接也一并粘贴。解析器会自动规范化智能引号和 PowerShell 提示符标记。

  2. 选择目标语言

    标签页涵盖 JavaScript fetch、TypeScript、Node axios、Python requests、Python httpx、Go、PHP、Ruby、Java HttpClient、C# HttpClient、HTTPie 和 PowerShell。切换标签页不需要额外开销,解析只运行一次。

  3. 检查解析后的请求

    打开“解析后的请求”面板,确认请求方法、URL、请求头、请求体类型,以及 insecure 或 follow redirects 等选项都和你预期的一致。

  4. 复制代码并处理认证信息

    把生成的代码复制到你的项目中。如果 curl 里带有 Bearer 令牌或 Cookie,提交之前先把写死的值换成环境变量。

cURL 参数速查表

这个转换器能识别的参数,以及它们在生成的代码中对应什么。

参数含义示例
-X, --requestHTTP 请求方法-X POST
-H, --header请求头(可重复使用)-H 'Accept: application/json'
-d, --data请求体,默认进行 URL 编码-d 'name=Ada&age=30'
--data-raw不展开 @file 的请求体--data-raw '$body'
--data-urlencode对请求体的一部分进行百分号编码--data-urlencode 'q=hello world'
-F, --formmultipart 表单字段(文件用 @file)-F 'avatar=@photo.jpg'
-u, --userBasic 认证 → Authorization: Basic …-u alice:s3cret
-G, --get把请求体提升为查询字符串,发送 GET-G -d 'q=ada'
-b, --cookieCookie 请求头-b 'session=abc'
-A, --user-agentUser-Agent 请求头-A 'MyApp/1.0'
-L, --location跟随 3xx 重定向-L
-k, --insecure跳过 TLS 验证(仅限开发环境!)-k
--compressed接受 gzip/deflate/br 压缩的响应--compressed
--max-time整个请求的超时时间(秒)--max-time 30

cURL 转换示例

带查询字符串和认证请求头的 GET

curl
curl 'https://api.example.com/v1/lessons?limit=20&track=python' \  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.demo'
JavaScript (fetch)
const response = await fetch('https://api.example.com/v1/lessons?limit=20&track=python', {  method: 'GET',  headers: {    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiJ9.demo'  }});const data = await response.json();

URL 中的查询参数会留在 URL 里,转换器不会为 fetch 把它们重新拆分成单独的 params 对象。对于 axios 和 requests,为了便于阅读,你会看到它们被提取到 params / params= 中。

POST 一个 JSON 请求体

curl
curl 'https://api.example.com/v1/users' \  -H 'Content-Type: application/json' \  --data-raw '{"name":"Ada","age":36}'
Python (requests)
import requests
headers = {    'Content-Type': 'application/json',}json_data = {"name":"Ada","age":36}
response = requests.post('https://api.example.com/v1/users', headers=headers, json=json_data)response.raise_for_status()

当请求体能解析为 JSON 且 Content-Type 为 application/json 时,转换器会为 requests 生成 json=,为 axios 生成 data:(解析后的对象)。如果 JSON.parse 失败,就保留原始字符串,绝不改写。

multipart 文件上传

curl
curl 'https://api.example.com/upload' \  -F 'caption=Hello' \  -F 'photo=@./avatar.jpg'
Python (requests)
import requests
files = {    'caption': (None, 'Hello'),    'photo': open('./avatar.jpg', 'rb'),}
response = requests.post('https://api.example.com/upload', files=files)response.raise_for_status()

-F field=@file 会变成真正的文件上传(Python 中是 open('…', 'rb'),JavaScript 中是 FormData.append)。普通的 -F 字段会变成常规表单值。对于需要在运行时提供的文件数据,浏览器预览中会显示一个 TODO 占位。

Basic 认证 + Cookie

curl
curl 'https://api.example.com/me' \  -u alice:s3cret \  -b 'session=2f9a; theme=dark'
JavaScript (fetch)
const response = await fetch('https://api.example.com/me', {  method: 'GET',  headers: {    'Authorization': 'Basic YWxpY2U6czNjcmV0',    'Cookie': 'session=2f9a; theme=dark'  }});

Basic 认证会合并成一个 Authorization 请求头。多个 Cookie 用 ; 连接,作为一个 Cookie 请求头发送,和 curl 实际发出的请求一致。

转换 curl 时的常见错误

  • 从博客文章里粘贴带智能引号(', ', ", ")的 curl。它们看起来像引号,却会破坏 shell 解析。转换器会自动规范化,但能复制原始命令的话尽量复制原始命令。
  • 在生产环境中保留 -k(--insecure)。它会关闭 TLS 证书验证,本地开发没问题,用在真实流量上就很危险。
  • 忘了 --data-raw 和 --data 的行为不同:--data 会对输入进行 URL 编码。JSON 请求体里含有 @ 或 & 时,请使用 --data-raw。
  • 粘贴 Windows 的 curl.exe 命令时,没有把 ^ 换行续接改成 \。转换器能处理这种情况,但解析器对引号要求很严格,请仔细检查字符串的边界。
  • 转换之后把 Bearer 令牌或 Cookie 提交进版本控制。提交之前,把它们换成环境变量(process.env.API_TOKEN、os.environ['API_TOKEN'])。

cURL 转换器常见问题

转换器支持哪些语言?

开箱即用支持 12 种目标:JavaScript (fetch)、TypeScript (fetch)、Node (axios)、Python (requests)、Python (httpx)、Go (net/http)、PHP (curl)、Ruby (Net::HTTP)、Java (HttpClient)、C# (HttpClient)、HTTPie 和 PowerShell (Invoke-RestMethod)。每种代码都由同一份解析结果生成,切换标签页立即生效。

它能处理 multipart 上传和 -F 参数吗?
能。-F field=value 会变成普通表单字段,-F file=@path 会变成真正的文件上传,使用 FormData(JS)、files=(Python)、CURLFile(PHP)等。文件路径会显示为 TODO 占位,你需要在运行时把它接到 File、Buffer 或流上。
我的 curl 命令会被发送到服务器吗?

不会。解析器和所有代码生成器都在你的浏览器中运行。Bearer 令牌、Cookie 和请求体都不会离开你的电脑,默认情况下我们甚至会在“解析后的请求”预览中把它们遮盖起来。

为什么我的 Windows curl 看起来不一样?
Windows 的 curl.exe(以及 CMD/PowerShell)用 ^ 或反引号 ` 作为换行续接,引号的写法也可能不同。转换器会规范化常见的 Windows 写法,但如果粘贴后结果不对,可以试着把命令复制成一行。
支持 GraphQL 请求吗?
支持。GraphQL 请求其实就是一个 POST,JSON 请求体里包含 query 和 variables。粘贴 curl 后,转换器会用你的目标语言生成一个普通的 JSON POST。响应结构({ data, errors })按你在任何 GraphQL 客户端中的方式处理即可。
可以粘贴从 Postman 导出的 curl 吗?
可以。Postman 的 Code → cURL 导出完全支持,包括它多行 \ 的格式。Chrome 和 Firefox 开发者工具中“Copy as cURL”生成的 curl 也同样支持。
fetch 和 axios,该选哪种输出?

如果你的项目已经在用 fetch(浏览器和现代 Node 都内置了它),就选 fetch。如果你需要自动解析 JSON、请求拦截器、重试或进度事件这些 fetch 默认不提供的功能,就选 axios。

了解更多

其他开发者工具

Coddy 编程语言插图

和 Coddy 一起学编程

开始