Python快速实现将curl命令转换成代码
作者:detayun
日常开发调试接口时,大家经常会在浏览器、Postman、Apifox 复制得到一段 curl 请求命令,想要直接在 Python 中发起相同网络请求。
手动把 curl 里的请求头、参数、Cookie、Body 一一翻译成 requests 代码,重复繁琐,极易漏参数、写错编码,本文讲解 curl 转 Python 代码的实用方案、避坑要点以及自动化工具。
一、常见场景:为什么需要 curl 转 Python
- 浏览器F12网络面板复制请求,直接拿到
curl命令; - 测试人员提供 curl 命令复现接口问题;
- 第三方文档只提供 curl 示例,没有 Python 代码;
- 调试爬虫、接口鉴权、复杂POST表单、文件上传、SSL自定义参数。
直接手写 requests 代码痛点:
- 请求头数十个,复制粘贴耗时;
- 区分
form-data、x-www-form-urlencoded、json body 极易混淆; - 容易丢失 Cookie、代理、超时、重定向设置;
- curl 携带
-X、-k、--proxy、--data-binary等特殊参数不好手动转换。
二、方案1:在线工具一键转换(快速临时使用)
适合临时调试,不需要安装任何库。
操作流程:
- 粘贴完整 curl 命令;
- 选择输出语言:Python + requests;
- 一键复制生成代码。
注意:在线工具局限性
- 内网地址、携带敏感 token、Cookie 不建议粘贴到公网网站;
- 部分复杂参数(自定义ssl证书、http2、unix socket)转换不全;
- 长命令、特殊二进制body容易解析出错。
三、方案2:本地Python库解析curl(生产/内网环境首选)
库:curlconverter(Python本地版)
可以在代码内部解析curl字符串,自动生成 requests 代码,离线可用,杜绝敏感信息外泄。
安装
pip install curlconverter
基础示例
import curlconverter
curl_cmd = """
curl 'https://httpbin.org/post' \
-X POST \
-H 'Content-Type: application/json' \
-H 'User-Agent: python-demo' \
-d '{"name":"test","id":1001}'
"""
# 转换成 requests 代码
python_code = curlconverter.to_python(curl_cmd)
print(python_code)
输出结果:
import requests
headers = {
'Content-Type': 'application/json',
'User-Agent': 'python-demo',
}
json_data = {
'name': 'test',
'id': 1001,
}
response = requests.post('https://httpbin.org/post', headers=headers, json=json_data)进阶:直接执行解析后的请求参数
库只能生成代码文本,如果想要直接运行请求,可以搭配 exec(仅限可控环境,不要解析外部不可信curl字符串!)
import curlconverter curl_str = """curl https://httpbin.org/get""" code = curlconverter.to_python(curl_str) print(code) # 谨慎使用exec,外部输入存在代码注入风险 # exec(code)
四、curl 常见参数对应 requests 对照表
很多时候工具转换存在瑕疵,掌握映射关系可以手动修正:
| curl 参数 | requests 对应写法 | 说明 |
|---|---|---|
-X POST | requests.post() | 指定请求方法 |
-H "key: val" | headers={} | 请求头 |
-d "a=1&b=2" | data={} | urlencoded表单 |
-d '{"k":1}' | json={} | json请求体 |
-F "file=@a.jpg" | files={} | multipart/form-data 文件上传 |
-k / --insecure | verify=False | 关闭SSL证书校验 |
-x http://127.0.0.1:7890 | proxies={“http”: “…”} | 代理 |
-b "session=xxx" | cookies={} | Cookie |
-L | allow_redirects=True | 跟随重定向 |
--max-time 10 | timeout=10 | 请求超时 |
五、高频踩坑清单
坑1:区分 data 和 json
curl 中 -d 传入json字符串,工具偶尔会错误放到data参数
错误写法:
requests.post(url, data='{"a":1}')
正确写法:
requests.post(url, json={"a":1})
区别:json= 会自动添加 Content-Type: application/json,并序列化对象。
坑2:form-data 表单被识别成普通data
文件上传场景,必须使用 files 参数,不能用 data。
坑3:verify=False 安全风险
verify=False 关闭SSL校验会抛出警告,生产环境不要随意使用;
如需消除警告:
import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
坑4:curl 单引号/双引号在Windows命令行不兼容
浏览器复制出来的curl一般是bash格式,Windows cmd/PowerShell直接运行会报错,但不影响解析库识别。
坑5:带有二进制、换行、特殊转义字符的body
--data-binary 和普通 -d 行为不同,转换后需要核对原始报文。
六、拓展:curl 转异步 aiohttp
curlconverter 同样支持输出 aiohttp 代码,适合高并发爬虫项目:
import curlconverter curl_text = """curl https://httpbin.org/get -H "Token: 123456" """ code = curlconverter.to_aiohttp(curl_text) print(code)
七、自制简易转换小工具(GUI/命令行思路)
如果你经常处理curl,可以简单封装脚本:
- 读取输入curl字符串;
- 调用 curlconverter 解析;
- 格式化代码,自动复制到剪贴板;
搭配pyperclip实现一键复制生成结果。
示例简易脚本:
import curlconverter
import pyperclip
def curl_to_requests():
print("粘贴curl命令,输入完成后回车两次结束:")
lines = []
while True:
line = input()
if not line:
break
lines.append(line)
curl_command = "\n".join(lines)
result = curlconverter.to_python(curl_command)
pyperclip.copy(result)
print("=====生成代码(已复制剪贴板)=====")
print(result)
if __name__ == "__main__":
curl_to_requests()
八、总结
- 临时快速转换:使用在线网站;敏感接口优先本地库;
- 内网、有密钥、隐私数据:使用
curlconverterPython 离线库,杜绝信息泄露; - 工具生成代码后务必核对:请求体类型、SSL校验、代理、重定向参数;
- 牢记
data/json/files三者区别,这是转换出错最高发的地方; - 自动化脚本可以大幅提升接口调试、爬虫开发效率,告别手动翻译curl。
延伸思考:除了转换成 requests,还可以将 curl 统一解析为请求结构体,封装通用请求调度器,统一同步/异步请求,实现接口批量压测、自动化回归测试。
以上就是Python快速实现将curl命令转换成代码的详细内容,更多关于Python curl命令转代码的资料请关注脚本之家其它相关文章!
