python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python curl命令转代码

Python快速实现将curl命令转换成代码

作者:detayun

这篇文章主要为大家详细介绍了如何将curl命令快速转换为Python代码,解决手动翻译请求头、参数等繁琐易错的问题,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

日常开发调试接口时,大家经常会在浏览器、Postman、Apifox 复制得到一段 curl 请求命令,想要直接在 Python 中发起相同网络请求。
手动把 curl 里的请求头、参数、Cookie、Body 一一翻译成 requests 代码,重复繁琐,极易漏参数、写错编码,本文讲解 curl 转 Python 代码的实用方案、避坑要点以及自动化工具。

一、常见场景:为什么需要 curl 转 Python

  1. 浏览器F12网络面板复制请求,直接拿到 curl 命令;
  2. 测试人员提供 curl 命令复现接口问题;
  3. 第三方文档只提供 curl 示例,没有 Python 代码;
  4. 调试爬虫、接口鉴权、复杂POST表单、文件上传、SSL自定义参数。

直接手写 requests 代码痛点:

二、方案1:在线工具一键转换(快速临时使用)

适合临时调试,不需要安装任何库。

操作流程:

  1. 粘贴完整 curl 命令;
  2. 选择输出语言:Python + requests;
  3. 一键复制生成代码。

注意:在线工具局限性

  1. 内网地址、携带敏感 token、Cookie 不建议粘贴到公网网站;
  2. 部分复杂参数(自定义ssl证书、http2、unix socket)转换不全;
  3. 长命令、特殊二进制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 POSTrequests.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 / --insecureverify=False关闭SSL证书校验
-x http://127.0.0.1:7890proxies={“http”: “…”}代理
-b "session=xxx"cookies={}Cookie
-Lallow_redirects=True跟随重定向
--max-time 10timeout=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,可以简单封装脚本:

  1. 读取输入curl字符串;
  2. 调用 curlconverter 解析;
  3. 格式化代码,自动复制到剪贴板;
    搭配 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()

八、总结

  1. 临时快速转换:使用在线网站;敏感接口优先本地库;
  2. 内网、有密钥、隐私数据:使用 curlconverter Python 离线库,杜绝信息泄露;
  3. 工具生成代码后务必核对:请求体类型、SSL校验、代理、重定向参数;
  4. 牢记 data / json / files 三者区别,这是转换出错最高发的地方;
  5. 自动化脚本可以大幅提升接口调试、爬虫开发效率,告别手动翻译curl。

延伸思考:除了转换成 requests,还可以将 curl 统一解析为请求结构体,封装通用请求调度器,统一同步/异步请求,实现接口批量压测、自动化回归测试。

以上就是Python快速实现将curl命令转换成代码的详细内容,更多关于Python curl命令转代码的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文