cURL 转 Python — 把 cURL 命令转换为 Python 代码
把 cURL 命令转换为 Python `requests` 或 `httpx` 代码。自动处理认证、Cookie 和请求体,全部在浏览器中运行。无上传、无限制。
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 里直接运行。
使用方法
粘贴一条 cURL 命令
从浏览器 DevTools(Network 标签 > Copy as cURL)、文档页面或 shell 历史记录里复制一条 cURL 命令。解析器能处理 `-H`、`-d`、`-X`、`-u`、`--cookie`、`--data-binary` 等常见标志。
选择一个 Python HTTP 库
可选 `requests`(最流行、同步、简单)、`httpx`(现代、支持异步、API 与 requests 兼容),或 `urllib`(标准库、无第三方依赖)。输出会相应调整 import 语句、函数调用以及响应处理方式。
自定义输出
默认输出是单次函数调用。切换选项可以加上超时处理、重试逻辑、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 端点中使用,无额外依赖。