curl 转代码 — Python、JavaScript、Go、PHP 等

粘贴 curl 命令(包括 Chrome 的“Copy as cURL”),即可得到 Python、JavaScript、Node、Go、PHP、Ruby、Java、C#、wget 或 HTTPie 版本的相同请求。

示例:
转换为
POST https://api.example.com/v1/orders · 2 个请求头 · JSON 请求体
import requests

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Content-Type': 'application/json',
}

json_data = {
    'customer_id': 'cus_123',
    'items': [
        {
            'sku': 'TSHIRT-M',
            'qty': 2,
        },
    ],
    'note': 'Leave at the door',
}

response = requests.post('https://api.example.com/v1/orders', headers=headers, json=json_data)
print(response.status_code)
print(response.text)

完全在你的浏览器中运行。命令只会被解析,不会被执行或发送到任何地方,因此其中的令牌和 Cookie 都留在你的电脑上。 浏览全部免费工具.

发现问题,或者觉得哪里可以更好?每条消息我们都会阅读,并尽快修复。

这款免费的 curl 转代码工具接收一条 curl 命令,并用 Python(requests)、JavaScript(fetch 或 Axios)、Node.js、Go、PHP、Ruby、Java、C#、wget 或 HTTPie 写出相同的 HTTP 请求。常见用法是:在浏览器开发者工具中找到一个请求,选择“Copy as cURL”,粘贴到这里,就能得到可运行的代码,不必重新输入请求头,也不必手动转义 JSON 请求体。

解析器遵循 curl 自身的规则:短选项可以合并(-sSL)或紧贴参数(-XPOST),URL 可以出现在任意位置,-d 默认表示使用表单内容类型的 POST,-G 把数据移到查询字符串中,--data-urlencode 的编码方式与 curl 一致。它能理解 bash 引号(包括 Chrome 生成的 $'…' 字符串),以及带 ^ 转义的 Windows cmd 引号。目标语言无法表达的内容(例如在浏览器中跳过 TLS 验证)会在注释中指出,而不是悄悄丢弃。

使用方法

  1. 在 Chrome 或 Edge 开发者工具中打开“Network”(网络)标签页,右键点击一个请求,选择 Copy → Copy as cURL(bash 或 cmd)。在 Firefox 中选择 Copy Value → Copy as cURL。或者自己编写 curl 命令。
  2. 把它粘贴到输入框中。方法、URL、请求头数量和请求体类型会显示在输出上方,方便你确认解析是否正确。
  3. 选择目标语言,代码会立即更新。
  4. 阅读黄色框中显示的说明:其中列出了被忽略或需要注意的选项。
  5. 复制或下载代码。提交到任何地方之前,请替换掉其中的令牌和 Cookie。

常见问题

如何在 Chrome 中把请求复制为 cURL?

打开开发者工具(F12 或 Cmd+Option+I),切换到“Network”标签页,如果列表为空就刷新页面。右键点击需要的请求,选择 Copy,然后在 macOS 和 Linux 上选 Copy as cURL (bash),在 Windows 上选 Copy as cURL (cmd)。两种格式这里都支持。复制的命令包含你的 Cookie 和授权请求头,请像对待密码一样对待它。

为什么浏览器 fetch 代码中缺少一些请求头?

浏览器不允许 JavaScript 设置某些请求头:Cookie、Host、Origin、Referer、实际上还有 User-Agent、Content-Length、Accept-Encoding、Connection,以及所有以 Sec- 或 Proxy- 开头的请求头。它们在 Fetch 标准中被称为禁止修改的请求头(forbidden request headers),由浏览器自行填写。浏览器 fetch 输出会省略这些请求头,并在注释中说明;Node.js fetch 输出则会保留它们,因为 Node 没有这种限制。

-d、--data-raw 和 --data-binary 有什么区别?

-d(--data)把文本作为请求体发送,但以 @ 开头的值会从文件读取,并去掉回车和换行。--data-raw 与之相同,只是没有 @ 读文件的行为,所以浏览器会用它。--data-binary 也会读取 @ 文件,但会原样保留字节。除非你自己传入请求头,否则这三者都会设置 Content-Type: application/x-www-form-urlencoded,多个 -d 选项会用 & 连接。

curl 会跟随重定向吗?

默认不会;除非加上 -L(--location),否则它会直接返回 3xx 响应。大多数 HTTP 库恰恰相反:fetch、Python requests、Go net/http、Node 中的 Axios 和 .NET HttpClient 都会自动跟随重定向。Java HttpClient、PHP cURL 和 Ruby Net::HTTP 不会,所以当命令带有 -L 时,生成的代码会为它们开启重定向跟随(Ruby 会附上说明,因为 Net::HTTP 没有对应的开关)。

--compressed 有什么作用?代码中需要它吗?

它让 curl 发送 Accept-Encoding 请求头(根据 curl 的编译方式,包括 gzip、deflate、br 和 zstd),并解压响应。浏览器、Python requests、Go 和 Node fetch 无需额外设置就会请求并解码压缩响应。生成的代码只在库需要手动开启的地方添加它:PHP 中的 CURLOPT_ENCODING、C# 中的 AutomaticDecompression、wget 中的 --compression=auto。

我的 curl 命令会被发送到任何地方吗?

不会。命令由本页中的 JavaScript 解析和转换。它绝不会被执行,也绝不会发送到服务器,因此从开发者工具复制的请求中的令牌和会话 Cookie 都只留在你的电脑上。

curl 选项及其转换结果

• -X / --request 设置方法。不设置时,方法默认为 GET;有 -d、--json 或 -F 时为 POST;有 -I 时为 HEAD;有 -T 时为 PUT。

• -H / --header 添加请求头。"Name:" 后面不跟任何内容表示删除该请求头,"Name;" 表示发送一个空请求头。

• --json body 发送 JSON,并把 Content-Type 和 Accept 都设为 application/json(curl 7.82 及更高版本)。

• -F name=value 和 -F file=@photo.jpg;type=image/jpeg 构建 multipart/form-data 请求体;代码会视情况使用 FormData、files=、CURLFile 或 MultipartFormDataContent。

• -u user:password 转为 Basic 认证;-b "a=1; b=2" 转为 Cookie 请求头(在 Python 中为 cookies 字典)。

• -A 和 -e 设置 User-Agent 和 Referer。-k / --insecure 会禁用证书检查;在可能的地方会附带警告显示,因为它绝不应该进入生产环境。

• -G / --get 把所有 -d 和 --data-urlencode 的值作为查询字符串附加到 URL 上,并发送 GET 请求。

• -s、-S、-v、-i、-o 和进度相关选项只影响 curl 如何打印输出,在代码中没有对应项,因此会被忽略。

Bash 和 Windows 引号规则简介

在 bash 中,'单引号' 内的文本按字面处理;"双引号" 允许 \" 和 \$ 转义;$'…' 字符串支持 \n、\t、\' 和 \xHH 转义。行尾的反斜杠表示命令在下一行继续。只要请求头或请求体中含有单引号或非 ASCII 字符,Chrome 就会使用 $'…'。

在 Windows cmd 中,^ 是转义字符,同时也用于续行。Chrome 的“Copy as cURL (cmd)”会把每个值包在 ^"…^" 中,并用 ^ 转义 &、%、{ 和 } 等字符。PowerShell 又有所不同:在 Windows PowerShell 5 中 curl 是 Invoke-WebRequest 的别名,所以在那里要明确运行 curl.exe。本转换器可读取 bash 和 cmd 两种形式;不支持 PowerShell 特有的语法,例如反引号续行。

相关免费工具

  • JSON 转 TypeScript — 粘贴 JSON 示例,即可得到 TypeScript 接口、Zod 模式、JSON Schema,或 Go、Python、Java、C#、Kotlin、Swift 和 Rust 的类型定义。
  • JSON 格式化 — 格式化、压缩和校验 JSON,解析错误精确到行和列。在浏览器中运行,无需上传。
  • JWT 解码器 — 解码 JWT 的头部和载荷,用通俗语言显示过期时间,验证 HS、RS、PS 和 ES 签名,或签发新令牌。任何数据都不会离开浏览器。
  • Base64 编码 / 解码工具 — 把文本或文件编码为 Base64,把图片转成带 CSS 和 <img> 代码片段的 data URI,还能把 Base64 解码回可预览的文件。数据不会离开你的浏览器。
  • SSL 证书解析 — 粘贴 PEM 证书、证书链或 CSR,或上传 .crt 文件,查看 SAN、过期时间、颁发者、密钥类型和指纹。在浏览器中解析。