ToolConvoyToolConvoyv2.6
DEV

cURL 转 Python — 把 cURL 命令转换为 Python 代码

把 cURL 命令转换为 Python `requests` 或 `httpx` 代码。自动处理认证、Cookie 和请求体,全部在浏览器中运行。无上传、无限制。

● 本地运行 · 在您的标签页中生成页面加载以来工具发出的网络请求:0 次

cURL to Python

Convert cURL commands to Python requests code. Works entirely in your browser — no uploads.

cURL 转 Python 是任何开发者工具箱里最常用的 cURL 转语言转换器,原因在于 Python 的 requests 库是所有语言里做 HTTP 调用最短、最可读的方式,而且从 cURL 到 requests 的转换是机械的:标头变成 headers 字典,请求体变成 data=json= 参数,认证变成 auth= 元组或一条 Bearer 标头,Cookie 变成 cookies= 字典。输出是一段 5 行的小片段,能完成一段 30 行 Bash cURL 调用同样的事,并且具备真正的 Python 服务所需的错误处理和参数化能力。

cURL 转 Python 中「不那么显然」的一点是库的选择。默认的 requests 适合 90% 的场景 —— 同步、广为人知,是 Python HTTP 事实上的标准。httpx 适合异步代码(FastAPI 服务、asyncio 脚本)以及需要 HTTP/2 支持的场景。urllib 适合无法安装第三方包、只能使用标准库的环境。工具里的库切换会改变输出:请求形态保持一致,import 语句和函数调用相应调整。对大多数用户而言,requests 是合理的默认;切换选项的存在,是为了覆盖它不是最佳选择的那部分场景。

最终的交接:如果目标是写脚本,把输出粘进一个 .py 文件,再补上 if __name__ == "__main__": 这类样板代码。如果目标是写服务,把调用包进一个带合适错误处理和超时的函数。如果目标是异步代码库,选 httpx 并开启异步选项。如果目标是一次性调试,原样输出就够了 —— 把它粘到 Python REPL 或 Jupyter cell 里直接运行。

广告

使用方法

  1. 粘贴一条 cURL 命令

    从浏览器 DevTools(Network 标签 > Copy as cURL)、文档页面或 shell 历史记录里复制一条 cURL 命令。解析器能处理 `-H`、`-d`、`-X`、`-u`、`--cookie`、`--data-binary` 等常见标志。

  2. 选择一个 Python HTTP 库

    可选 `requests`(最流行、同步、简单)、`httpx`(现代、支持异步、API 与 requests 兼容),或 `urllib`(标准库、无第三方依赖)。输出会相应调整 import 语句、函数调用以及响应处理方式。

  3. 自定义输出

    默认输出是单次函数调用。切换选项可以加上超时处理、重试逻辑、JSON 响应解析,或者把调用包进 `with` 块(用于 `httpx` 的 client 模式)。

常见问题

应该选 requests 还是 httpx?

在脚本、简单服务,以及不需要异步的场景下,requests 是正确选择。在异步代码(FastAPI、asyncio 脚本)以及需要 HTTP/2 支持时,httpx 是正确选择。两者的 API 几乎完全一样;切换只是改 5 行代码。

能在 Python 2 上用吗?

默认输出针对 Python 3.6+(使用 f-string、类型注解和现代语法)。如果要兼容 Python 2.7,需要手动把 f-string 改成 `.format()` 调用。`requests` 库本身两个版本都支持,但 f-string 不行。

Cookie 和认证是怎么处理的?

`-b 'name=value'` 会变成 `cookies=` 字典或一条 `Cookie` 标头。`-u 'user:pass'` 会变成传给 `auth` 参数的 `requests.auth.HTTPBasicAuth` 对象。`-H 'Authorization: Bearer ...'` 中的 Bearer token 会作为原始标头保留。

能生成异步代码吗?

可以 —— 选 `httpx`,并开启「async」选项。输出会使用 `httpx.AsyncClient()`,搭配 `async def` 和 `await`。请求形态与同步版本一致,所以转换在生成的片段里只需改一行。

文件上传和 multipart 表单怎么办?

支持 multipart 表单上传(`-F file=@path`)。在 `requests` 下输出会使用 `files={'file': open('path', 'rb')}`,`httpx` 下使用等价写法。对于二进制上传,工具也能处理 `--data-binary @file`,生成 `data=open(...)` 参数。

限制说明

  • 默认没有重试逻辑生成的代码只发一次请求并返回响应。生产环境使用,应当加上带重试策略的 `requests.adapters.HTTPAdapter`,或者用 `tenacity` 库对瞬时错误做指数退避。
  • 不复用 Session默认输出每次调用都新建一个 client。如果需要向同一主机发多个请求,把调用包进 `with requests.Session() as s:` 块即可。工具不会自动加上 Session,因为部分用户希望保留独立调用。
  • 不支持流式响应默认输出会把整个响应体读进内存。要流式下载,使用 `response.iter_content()`(requests)或 `response.aiter_bytes()`(httpx)。工具以非流式版本作为标准模式输出。

平台说明

macOS
输出中的 f-string 语法需要 Python 3.6+。`requests` 和 `httpx` 库通过 `pip install requests httpx` 安装,两者都为 macOS 提供 wheel 包,无需编译器。
Windows
需要 Python 3.6+。可从 python.org 下载官方 .exe 安装包,或通过 Microsoft Store 安装。`requests` 和 `httpx` 库通过 `pip install` 安装,没有平台相关的编译步骤。
Linux
需要 Python 3.6+。大多数发行版的默认仓库都已自带 Python 3.6+。`requests` 和 `httpx` 库通过 `pip install` 安装,wheel 构建没有系统级依赖。
CLI
驱动本工具的同一个库也作为 `curlconverter` 包发布在 npm 上,并提供 `curlconverter --language python` 的 CLI 模式。适合嵌入到构建脚本里,或批量转换保存下来的 cURL 命令。
Web
完全在客户端运行。页面加载完后离线可用。生成的 Python 代码可移植 —— 可直接粘到任意 Python 脚本、Jupyter notebook 或 FastAPI 端点中使用,无额外依赖。
广告

相关工具

广告