easy-curl-parser


Nameeasy-curl-parser JSON
Version 0.1.1 PyPI version JSON
download
home_pageNone
Summary一个用于解析cURL命令的Python库
upload_time2025-09-06 14:32:49
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseMIT
keywords curl parser http request
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # cURL 命令解析器

一个用于解析cURL命令行并将其转换为结构化数据的Python库。

## 特性

- 🔄 **命令解析**: 解析标准的 cURL 命令并提取关键信息
- 📊 **结构化输出**: 将解析结果转换为结构化的数据格式
- 🌐 **多种输入**: 支持命令行直接输入、文件读取和管道输入
- 📋 **全面支持**: 支持 HTTP 方法、请求头、Cookie、请求体等常见选项
- 🔍 **参数提取**: 自动解析 URL 查询参数和表单数据
- 🛠️ **CLI 工具**: 提供命令行工具,支持 JSON 和文本格式输出

## 支持的 cURL 选项

- `-X, --request`: HTTP 请求方法 (GET, POST, PUT, DELETE 等)
- `-H, --header`: 请求头设置
- `-d, --data`: 请求体数据
- `-b, --cookie`: Cookie 设置
- `-F, --form`: 表单数据
- `-u, --user`: 用户认证
- `-L, --location`: 跟随重定向
- `-k, --insecure`: 忽略 SSL 证书验证
- `-v, --verbose`: 详细输出
- `-o, --output`: 输出到文件


## 安装

```bash
pip install easy-curl-parser
```

## 使用方法

### 命令行工具

```bash
# 直接解析 cURL 命令
python -m curl_parser.cli 'curl -H "Accept: application/json" https://api.example.com'

# 从文件读取 cURL 命令
python -m curl_parser.cli -f curl_command.txt

# 通过管道输入
echo 'curl https://example.com' | python -m curl_parser.cli

# JSON 格式输出
python -m curl_parser.cli -j 'curl https://example.com'

# 输出到文件
python -m curl_parser.cli -o result.txt 'curl https://example.com'
```

### Python API

```python
from curl_parser import parse_curl

# 解析cURL命令
curl_command = "curl 'http://example.com' -H 'Accept: application/json'"
result = parse_curl(curl_command)

# 获取解析后的数据
print(result.parsed_data.url)  # http://example.com
print(result.parsed_data.headers)  # {'Accept': 'application/json'}
```

## 数据结构

`parse_curl` 函数返回 `CurlParseResult` 对象,包含:

- `parsed_data`: 解析后的数据,类型为 `ParsedCurlData`
- `unresolved_data`: 未被解析的数据

`ParsedCurlData` 包含以下字段:

- `url`: 请求URL
- `params`: URL查询参数
- `headers`: 请求头
- `cookies`: Cookie
- `data`: 请求体数据
- `request`: 请求方法 (默认为 "GET")

## 示例

```python
from curl_parser import parse_curl

curl_command = '''
curl 'http://localhost:155/common/sso/login?_t=1757126032510_JG9BY' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' \
  -b 'locale=und' \
  --data-raw 'username=erdcadmin&password=GaSkDZ2dZOmracDMTMoRy9uqMnxa46FK3OHnE1ppGbuz9clTDWb+nZDVdFqoatPL'
'''

result = parse_curl(curl_command)
print(result.parsed_data.url)  # http://localhost:155/common/sso/login
print(result.parsed_data.params)  # {'_t': '1757126032510_JG9BY'}
print(result.parsed_data.request)  # POST
```

## 开发

### 安装开发依赖

```bash
git clone https://github.com/RosApr/curl-parser.git
cd curl-parser
pip install -e .
```

### 运行测试

```bash
python ./test/test_parser.py
```

## 许可证

MIT

## 贡献

欢迎提交问题和Pull Request!

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "easy-curl-parser",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "curl, parser, http, request",
    "author": null,
    "author_email": "RosApr <287134285@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/f8/2b/ea58d08e9b57d79a3cae6fc90eded11aff5b9e59d7377c1c0400aa0a595c/easy_curl_parser-0.1.1.tar.gz",
    "platform": null,
    "description": "# cURL \u547d\u4ee4\u89e3\u6790\u5668\r\n\r\n\u4e00\u4e2a\u7528\u4e8e\u89e3\u6790cURL\u547d\u4ee4\u884c\u5e76\u5c06\u5176\u8f6c\u6362\u4e3a\u7ed3\u6784\u5316\u6570\u636e\u7684Python\u5e93\u3002\r\n\r\n## \u7279\u6027\r\n\r\n- \ud83d\udd04 **\u547d\u4ee4\u89e3\u6790**: \u89e3\u6790\u6807\u51c6\u7684 cURL \u547d\u4ee4\u5e76\u63d0\u53d6\u5173\u952e\u4fe1\u606f\r\n- \ud83d\udcca **\u7ed3\u6784\u5316\u8f93\u51fa**: \u5c06\u89e3\u6790\u7ed3\u679c\u8f6c\u6362\u4e3a\u7ed3\u6784\u5316\u7684\u6570\u636e\u683c\u5f0f\r\n- \ud83c\udf10 **\u591a\u79cd\u8f93\u5165**: \u652f\u6301\u547d\u4ee4\u884c\u76f4\u63a5\u8f93\u5165\u3001\u6587\u4ef6\u8bfb\u53d6\u548c\u7ba1\u9053\u8f93\u5165\r\n- \ud83d\udccb **\u5168\u9762\u652f\u6301**: \u652f\u6301 HTTP \u65b9\u6cd5\u3001\u8bf7\u6c42\u5934\u3001Cookie\u3001\u8bf7\u6c42\u4f53\u7b49\u5e38\u89c1\u9009\u9879\r\n- \ud83d\udd0d **\u53c2\u6570\u63d0\u53d6**: \u81ea\u52a8\u89e3\u6790 URL \u67e5\u8be2\u53c2\u6570\u548c\u8868\u5355\u6570\u636e\r\n- \ud83d\udee0\ufe0f **CLI \u5de5\u5177**: \u63d0\u4f9b\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u652f\u6301 JSON \u548c\u6587\u672c\u683c\u5f0f\u8f93\u51fa\r\n\r\n## \u652f\u6301\u7684 cURL \u9009\u9879\r\n\r\n- `-X, --request`: HTTP \u8bf7\u6c42\u65b9\u6cd5 (GET, POST, PUT, DELETE \u7b49)\r\n- `-H, --header`: \u8bf7\u6c42\u5934\u8bbe\u7f6e\r\n- `-d, --data`: \u8bf7\u6c42\u4f53\u6570\u636e\r\n- `-b, --cookie`: Cookie \u8bbe\u7f6e\r\n- `-F, --form`: \u8868\u5355\u6570\u636e\r\n- `-u, --user`: \u7528\u6237\u8ba4\u8bc1\r\n- `-L, --location`: \u8ddf\u968f\u91cd\u5b9a\u5411\r\n- `-k, --insecure`: \u5ffd\u7565 SSL \u8bc1\u4e66\u9a8c\u8bc1\r\n- `-v, --verbose`: \u8be6\u7ec6\u8f93\u51fa\r\n- `-o, --output`: \u8f93\u51fa\u5230\u6587\u4ef6\r\n\r\n\r\n## \u5b89\u88c5\r\n\r\n```bash\r\npip install easy-curl-parser\r\n```\r\n\r\n## \u4f7f\u7528\u65b9\u6cd5\r\n\r\n### \u547d\u4ee4\u884c\u5de5\u5177\r\n\r\n```bash\r\n# \u76f4\u63a5\u89e3\u6790 cURL \u547d\u4ee4\r\npython -m curl_parser.cli 'curl -H \"Accept: application/json\" https://api.example.com'\r\n\r\n# \u4ece\u6587\u4ef6\u8bfb\u53d6 cURL \u547d\u4ee4\r\npython -m curl_parser.cli -f curl_command.txt\r\n\r\n# \u901a\u8fc7\u7ba1\u9053\u8f93\u5165\r\necho 'curl https://example.com' | python -m curl_parser.cli\r\n\r\n# JSON \u683c\u5f0f\u8f93\u51fa\r\npython -m curl_parser.cli -j 'curl https://example.com'\r\n\r\n# \u8f93\u51fa\u5230\u6587\u4ef6\r\npython -m curl_parser.cli -o result.txt 'curl https://example.com'\r\n```\r\n\r\n### Python API\r\n\r\n```python\r\nfrom curl_parser import parse_curl\r\n\r\n# \u89e3\u6790cURL\u547d\u4ee4\r\ncurl_command = \"curl 'http://example.com' -H 'Accept: application/json'\"\r\nresult = parse_curl(curl_command)\r\n\r\n# \u83b7\u53d6\u89e3\u6790\u540e\u7684\u6570\u636e\r\nprint(result.parsed_data.url)  # http://example.com\r\nprint(result.parsed_data.headers)  # {'Accept': 'application/json'}\r\n```\r\n\r\n## \u6570\u636e\u7ed3\u6784\r\n\r\n`parse_curl` \u51fd\u6570\u8fd4\u56de `CurlParseResult` \u5bf9\u8c61\uff0c\u5305\u542b\uff1a\r\n\r\n- `parsed_data`: \u89e3\u6790\u540e\u7684\u6570\u636e\uff0c\u7c7b\u578b\u4e3a `ParsedCurlData`\r\n- `unresolved_data`: \u672a\u88ab\u89e3\u6790\u7684\u6570\u636e\r\n\r\n`ParsedCurlData` \u5305\u542b\u4ee5\u4e0b\u5b57\u6bb5\uff1a\r\n\r\n- `url`: \u8bf7\u6c42URL\r\n- `params`: URL\u67e5\u8be2\u53c2\u6570\r\n- `headers`: \u8bf7\u6c42\u5934\r\n- `cookies`: Cookie\r\n- `data`: \u8bf7\u6c42\u4f53\u6570\u636e\r\n- `request`: \u8bf7\u6c42\u65b9\u6cd5 (\u9ed8\u8ba4\u4e3a \"GET\")\r\n\r\n## \u793a\u4f8b\r\n\r\n```python\r\nfrom curl_parser import parse_curl\r\n\r\ncurl_command = '''\r\ncurl 'http://localhost:155/common/sso/login?_t=1757126032510_JG9BY' \\\r\n  -H 'Accept: application/json, text/plain, */*' \\\r\n  -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' \\\r\n  -b 'locale=und' \\\r\n  --data-raw 'username=erdcadmin&password=GaSkDZ2dZOmracDMTMoRy9uqMnxa46FK3OHnE1ppGbuz9clTDWb+nZDVdFqoatPL'\r\n'''\r\n\r\nresult = parse_curl(curl_command)\r\nprint(result.parsed_data.url)  # http://localhost:155/common/sso/login\r\nprint(result.parsed_data.params)  # {'_t': '1757126032510_JG9BY'}\r\nprint(result.parsed_data.request)  # POST\r\n```\r\n\r\n## \u5f00\u53d1\r\n\r\n### \u5b89\u88c5\u5f00\u53d1\u4f9d\u8d56\r\n\r\n```bash\r\ngit clone https://github.com/RosApr/curl-parser.git\r\ncd curl-parser\r\npip install -e .\r\n```\r\n\r\n### \u8fd0\u884c\u6d4b\u8bd5\r\n\r\n```bash\r\npython ./test/test_parser.py\r\n```\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\nMIT\r\n\r\n## \u8d21\u732e\r\n\r\n\u6b22\u8fce\u63d0\u4ea4\u95ee\u9898\u548cPull Request\uff01\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\u4e00\u4e2a\u7528\u4e8e\u89e3\u6790cURL\u547d\u4ee4\u7684Python\u5e93",
    "version": "0.1.1",
    "project_urls": {
        "Bug Reports": "https://github.com/RosApr/curl-parser/issues",
        "Homepage": "https://github.com/RosApr/curl-parser",
        "Source": "https://github.com/RosApr/curl-parser"
    },
    "split_keywords": [
        "curl",
        " parser",
        " http",
        " request"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4e8610db74dc10b40e3ec9e979cb8a0a3df2b2d4888d22e336c2eafff6eaf31e",
                "md5": "6b0785ff74c7259633e7359108cfa327",
                "sha256": "9ad0ed2cc597c1f7f83cf1cf9c065e0dfb9b6d85932be1038b07da48298cc3a7"
            },
            "downloads": -1,
            "filename": "easy_curl_parser-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6b0785ff74c7259633e7359108cfa327",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 7857,
            "upload_time": "2025-09-06T14:32:45",
            "upload_time_iso_8601": "2025-09-06T14:32:45.836402Z",
            "url": "https://files.pythonhosted.org/packages/4e/86/10db74dc10b40e3ec9e979cb8a0a3df2b2d4888d22e336c2eafff6eaf31e/easy_curl_parser-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f82bea58d08e9b57d79a3cae6fc90eded11aff5b9e59d7377c1c0400aa0a595c",
                "md5": "d819d4aa95d7aed6e034afdd993ec809",
                "sha256": "3eab3726afaa99f00ec62cd643ab6ff24e8a161631b1ae09a1a57ab6072a7d12"
            },
            "downloads": -1,
            "filename": "easy_curl_parser-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "d819d4aa95d7aed6e034afdd993ec809",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 8155,
            "upload_time": "2025-09-06T14:32:49",
            "upload_time_iso_8601": "2025-09-06T14:32:49.521306Z",
            "url": "https://files.pythonhosted.org/packages/f8/2b/ea58d08e9b57d79a3cae6fc90eded11aff5b9e59d7377c1c0400aa0a595c/easy_curl_parser-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-06 14:32:49",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "RosApr",
    "github_project": "curl-parser",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "easy-curl-parser"
}
        
Elapsed time: 1.78828s