uproxier


Nameuproxier JSON
Version 0.1.7 PyPI version JSON
download
home_pageNone
SummaryHTTP/HTTPS proxy with rules engine and web UI
upload_time2025-09-11 15:31:50
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords proxy mitmproxy sse rules mock http https
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # UProxier · 代理服务器

基于 mitmproxy 的完整代理软件解决方案,支持 HTTP/HTTPS 代理、请求拦截、规则配置和 Web 界面。

## 功能特性

- 🔄 **HTTP/HTTPS 代理**: 完整代理,支持 HTTPS 解密开关
- 🛡️ **证书管理**: 自动生成/校验/安装 mitmproxy CA 证书
- 📋 **规则引擎**: 多动作叠加、优先级、命中短路
    - mock_response / modify_headers / modify_content / redirect
    - delay_response / conditional_response
- 💾 **持久化**: 可将抓到的请求以 JSONL 持久化
- 🌐 **Web 界面**: 实时流量、点击行查看详情、搜索、清空
- 🎯 **CLI 工具**: start/init/cert/version/examples & 静默模式
- 📊 **抓包控制**: 流媒体/大文件开关、阈值与二进制保存控制
- 🔧 **配置管理**: YAML 配置 + CLI 覆盖

## 安装

```bash
pip install uproxier
```

### 依赖要求

- Python 3.8+
- OpenSSL (用于证书生成)

## 快速开始

### 1. 启动代理

```bash
uproxier start
```

首次启动会自动在用户目录生成 `~/.uproxier/` CA 证书。

### 2. 安装证书

**Web 界面下载**:打开 Web 界面右上角"扫码下载证书",移动设备用浏览器访问下载链接安装。

**命令行安装**:

```bash
uproxier cert
# 选择安装到系统,或按提示手动安装
```

### 3. 配置代理

在浏览器/设备中配置代理设置:

- 代理地址: `<本机IP>`
- 端口: `8001`

## 使用说明

### 命令行工具

#### 主要命令

**启动代理服务器**

```bash
uproxier start \
  --host 0.0.0.0 \                # 代理服务器监听地址
  --port 8001 \                   # 代理服务器端口
  --web-port 8002 \               # Web 界面端口
  --config <path> \               # 配置文件路径
  --save ./logs/traffic.jsonl \   # 保存请求数据到文件
  --save-format jsonl \           # 保存格式
  --enable-https \                # 启用 HTTPS 解密
  --disable-https \               # 禁用 HTTPS 解密
  --silent                        # 静默模式
  --daemon                        # 后台模式启动
```

**证书管理**

```bash
uproxier cert                     # 管理证书(生成、安装、清理)
```

**服务器控制**

```bash
uproxier status                   # 查看服务器状态
uproxier stop                     # 停止后台运行的服务器
```

**规则示例管理**

```bash
uproxier examples --list          # 列出所有可用示例
uproxier examples --readme        # 显示示例说明文档
uproxier examples --show <文件名> # 显示指定示例内容
uproxier examples --copy <文件名> # 复制示例到当前目录
```

**其他命令**

```bash
uproxier --verbose                # 详细输出
uproxier --version                # 显示版本信息
uproxier --help                   # 显示帮助信息
```

## API 使用

UProxier 提供了完整的 Python API,支持阻塞和非阻塞两种启动方式。

### 快速示例

**阻塞启动**:
```python
from proxy_server import ProxyServer

proxy = ProxyServer("config.yaml")
proxy.start("0.0.0.0", 8001, 8002)  # 阻塞启动
```

**异步启动**:
```python
from proxy_server import ProxyServer

proxy = ProxyServer("config.yaml", silent=True)
proxy.start_async("0.0.0.0", 8001, 8002)  # 非阻塞启动
# 继续执行其他代码...
proxy.stop()
```

### 详细文档

完整的 API 使用指南请参考:[API_USAGE.md](https://github.com/Huang-Jacky/UProxier/blob/main/API_USAGE.md)

包含:
- 阻塞启动 vs 异步启动的使用场景
- 完整的参数说明和示例
- 进程管理和状态检查
- 错误处理和最佳实践
- 测试和自动化场景示例

## 规则配置

项目支持在 `config.yaml` 中定义规则,包含请求/响应修改、Mock、延迟等。

### 基本规则结构

```yaml
- name: 规则名称
  enabled: true
  priority: 100
  stop_after_match: false
  match:
    host: "^api\\.example\\.com$"
    path: "^/v1/data$"
    method: "GET"
  request_pipeline: []  # 请求阶段动作
  response_pipeline:    # 响应阶段动作
    - action: mock_response
      params:
        status_code: 200
        content: '{"status": "success"}'
```

### 常用动作

**请求阶段 (request_pipeline)**

- `set_header`: 设置请求头
- `remove_header`: 删除请求头
- `rewrite_url`: URL 重写
- `redirect`: 重定向请求

**响应阶段 (response_pipeline)**

- `mock_response`: 完全替换响应
- `set_status`: 设置状态码
- `set_header`: 设置响应头
- `replace_body`: 响应体替换
- `delay`: 延迟响应

### 查看示例

```bash
uproxier examples --list          # 列出所有示例
uproxier examples --readme        # 查看示例说明
uproxier examples --copy 01_set_header.yaml  # 复制示例
```

## Web 界面

访问 `http://<本机IP>:8002` 查看 Web 界面,功能包括:

- 📊 实时流量统计
- 📋 请求/响应详情
- 🔍 流量搜索
- 💾 数据导出

## 证书管理

### 自动安装

```bash
uproxier cert
# 选择 "安装证书到系统"
```

### 手动安装

⚠️ **重要提醒**:只安装证书文件,不要安装包含私钥的文件!

**证书文件位置**:`~/.uproxier/`

- `mitmproxy-ca-cert.pem` - PEM 格式证书(推荐)
- `mitmproxy-ca-cert.der` - DER 格式证书

**安装命令**:

```bash
# macOS
security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ~/.uproxier/mitmproxy-ca-cert.pem

# Windows
certutil -addstore -f ROOT ~/.uproxier/mitmproxy-ca-cert.der

# Linux
sudo cp ~/.uproxier/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy-ca.crt
sudo update-ca-certificates
```

## 故障排除

### 常见问题

1. **安装后 uproxier 命令不可用**
   ```bash
   # 如果使用 pyenv,检查版本设置
   pyenv global 3.10.6  # 替换为你的 Python 版本
   
   # 确保 Python bin 目录在 PATH 中
   export PATH="$(python3 -c "import sys; print(sys.executable.replace('python3', ''))"):$PATH"
   ```

2. **证书错误**
    - 确保证书已正确安装到系统
    - 重新生成证书:`uproxier cert`

3. **端口被占用**
    - 使用不同的端口:`uproxier start --port 8003`

4. **规则不生效**
    - 检查规则配置是否正确
    - 确认规则已启用
    - 查看日志输出

5. **HTTPS 连接失败**
    - 确保证书已安装
    - 检查浏览器代理设置

## 许可证

MIT License

## 参考

- [mitmproxy](https://mitmproxy.org/)
- [GitHub 仓库](https://github.com/Huang-Jacky/UProxier)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "uproxier",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "proxy, mitmproxy, sse, rules, mock, http, https",
    "author": null,
    "author_email": "huangjincheng <your-email@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/cf/e8/6e77fa62b8a5417fd6702532bc63ff47380066d04c4c44311ac651460fa8/uproxier-0.1.7.tar.gz",
    "platform": null,
    "description": "# UProxier \u00b7 \u4ee3\u7406\u670d\u52a1\u5668\n\n\u57fa\u4e8e mitmproxy \u7684\u5b8c\u6574\u4ee3\u7406\u8f6f\u4ef6\u89e3\u51b3\u65b9\u6848\uff0c\u652f\u6301 HTTP/HTTPS \u4ee3\u7406\u3001\u8bf7\u6c42\u62e6\u622a\u3001\u89c4\u5219\u914d\u7f6e\u548c Web \u754c\u9762\u3002\n\n## \u529f\u80fd\u7279\u6027\n\n- \ud83d\udd04 **HTTP/HTTPS \u4ee3\u7406**: \u5b8c\u6574\u4ee3\u7406\uff0c\u652f\u6301 HTTPS \u89e3\u5bc6\u5f00\u5173\n- \ud83d\udee1\ufe0f **\u8bc1\u4e66\u7ba1\u7406**: \u81ea\u52a8\u751f\u6210/\u6821\u9a8c/\u5b89\u88c5 mitmproxy CA \u8bc1\u4e66\n- \ud83d\udccb **\u89c4\u5219\u5f15\u64ce**: \u591a\u52a8\u4f5c\u53e0\u52a0\u3001\u4f18\u5148\u7ea7\u3001\u547d\u4e2d\u77ed\u8def\n    - mock_response / modify_headers / modify_content / redirect\n    - delay_response / conditional_response\n- \ud83d\udcbe **\u6301\u4e45\u5316**: \u53ef\u5c06\u6293\u5230\u7684\u8bf7\u6c42\u4ee5 JSONL \u6301\u4e45\u5316\n- \ud83c\udf10 **Web \u754c\u9762**: \u5b9e\u65f6\u6d41\u91cf\u3001\u70b9\u51fb\u884c\u67e5\u770b\u8be6\u60c5\u3001\u641c\u7d22\u3001\u6e05\u7a7a\n- \ud83c\udfaf **CLI \u5de5\u5177**: start/init/cert/version/examples & \u9759\u9ed8\u6a21\u5f0f\n- \ud83d\udcca **\u6293\u5305\u63a7\u5236**: \u6d41\u5a92\u4f53/\u5927\u6587\u4ef6\u5f00\u5173\u3001\u9608\u503c\u4e0e\u4e8c\u8fdb\u5236\u4fdd\u5b58\u63a7\u5236\n- \ud83d\udd27 **\u914d\u7f6e\u7ba1\u7406**: YAML \u914d\u7f6e + CLI \u8986\u76d6\n\n## \u5b89\u88c5\n\n```bash\npip install uproxier\n```\n\n### \u4f9d\u8d56\u8981\u6c42\n\n- Python 3.8+\n- OpenSSL (\u7528\u4e8e\u8bc1\u4e66\u751f\u6210)\n\n## \u5feb\u901f\u5f00\u59cb\n\n### 1. \u542f\u52a8\u4ee3\u7406\n\n```bash\nuproxier start\n```\n\n\u9996\u6b21\u542f\u52a8\u4f1a\u81ea\u52a8\u5728\u7528\u6237\u76ee\u5f55\u751f\u6210 `~/.uproxier/` CA \u8bc1\u4e66\u3002\n\n### 2. \u5b89\u88c5\u8bc1\u4e66\n\n**Web \u754c\u9762\u4e0b\u8f7d**\uff1a\u6253\u5f00 Web \u754c\u9762\u53f3\u4e0a\u89d2\"\u626b\u7801\u4e0b\u8f7d\u8bc1\u4e66\"\uff0c\u79fb\u52a8\u8bbe\u5907\u7528\u6d4f\u89c8\u5668\u8bbf\u95ee\u4e0b\u8f7d\u94fe\u63a5\u5b89\u88c5\u3002\n\n**\u547d\u4ee4\u884c\u5b89\u88c5**\uff1a\n\n```bash\nuproxier cert\n# \u9009\u62e9\u5b89\u88c5\u5230\u7cfb\u7edf\uff0c\u6216\u6309\u63d0\u793a\u624b\u52a8\u5b89\u88c5\n```\n\n### 3. \u914d\u7f6e\u4ee3\u7406\n\n\u5728\u6d4f\u89c8\u5668/\u8bbe\u5907\u4e2d\u914d\u7f6e\u4ee3\u7406\u8bbe\u7f6e\uff1a\n\n- \u4ee3\u7406\u5730\u5740: `<\u672c\u673aIP>`\n- \u7aef\u53e3: `8001`\n\n## \u4f7f\u7528\u8bf4\u660e\n\n### \u547d\u4ee4\u884c\u5de5\u5177\n\n#### \u4e3b\u8981\u547d\u4ee4\n\n**\u542f\u52a8\u4ee3\u7406\u670d\u52a1\u5668**\n\n```bash\nuproxier start \\\n  --host 0.0.0.0 \\                # \u4ee3\u7406\u670d\u52a1\u5668\u76d1\u542c\u5730\u5740\n  --port 8001 \\                   # \u4ee3\u7406\u670d\u52a1\u5668\u7aef\u53e3\n  --web-port 8002 \\               # Web \u754c\u9762\u7aef\u53e3\n  --config <path> \\               # \u914d\u7f6e\u6587\u4ef6\u8def\u5f84\n  --save ./logs/traffic.jsonl \\   # \u4fdd\u5b58\u8bf7\u6c42\u6570\u636e\u5230\u6587\u4ef6\n  --save-format jsonl \\           # \u4fdd\u5b58\u683c\u5f0f\n  --enable-https \\                # \u542f\u7528 HTTPS \u89e3\u5bc6\n  --disable-https \\               # \u7981\u7528 HTTPS \u89e3\u5bc6\n  --silent                        # \u9759\u9ed8\u6a21\u5f0f\n  --daemon                        # \u540e\u53f0\u6a21\u5f0f\u542f\u52a8\n```\n\n**\u8bc1\u4e66\u7ba1\u7406**\n\n```bash\nuproxier cert                     # \u7ba1\u7406\u8bc1\u4e66\uff08\u751f\u6210\u3001\u5b89\u88c5\u3001\u6e05\u7406\uff09\n```\n\n**\u670d\u52a1\u5668\u63a7\u5236**\n\n```bash\nuproxier status                   # \u67e5\u770b\u670d\u52a1\u5668\u72b6\u6001\nuproxier stop                     # \u505c\u6b62\u540e\u53f0\u8fd0\u884c\u7684\u670d\u52a1\u5668\n```\n\n**\u89c4\u5219\u793a\u4f8b\u7ba1\u7406**\n\n```bash\nuproxier examples --list          # \u5217\u51fa\u6240\u6709\u53ef\u7528\u793a\u4f8b\nuproxier examples --readme        # \u663e\u793a\u793a\u4f8b\u8bf4\u660e\u6587\u6863\nuproxier examples --show <\u6587\u4ef6\u540d> # \u663e\u793a\u6307\u5b9a\u793a\u4f8b\u5185\u5bb9\nuproxier examples --copy <\u6587\u4ef6\u540d> # \u590d\u5236\u793a\u4f8b\u5230\u5f53\u524d\u76ee\u5f55\n```\n\n**\u5176\u4ed6\u547d\u4ee4**\n\n```bash\nuproxier --verbose                # \u8be6\u7ec6\u8f93\u51fa\nuproxier --version                # \u663e\u793a\u7248\u672c\u4fe1\u606f\nuproxier --help                   # \u663e\u793a\u5e2e\u52a9\u4fe1\u606f\n```\n\n## API \u4f7f\u7528\n\nUProxier \u63d0\u4f9b\u4e86\u5b8c\u6574\u7684 Python API\uff0c\u652f\u6301\u963b\u585e\u548c\u975e\u963b\u585e\u4e24\u79cd\u542f\u52a8\u65b9\u5f0f\u3002\n\n### \u5feb\u901f\u793a\u4f8b\n\n**\u963b\u585e\u542f\u52a8**\uff1a\n```python\nfrom proxy_server import ProxyServer\n\nproxy = ProxyServer(\"config.yaml\")\nproxy.start(\"0.0.0.0\", 8001, 8002)  # \u963b\u585e\u542f\u52a8\n```\n\n**\u5f02\u6b65\u542f\u52a8**\uff1a\n```python\nfrom proxy_server import ProxyServer\n\nproxy = ProxyServer(\"config.yaml\", silent=True)\nproxy.start_async(\"0.0.0.0\", 8001, 8002)  # \u975e\u963b\u585e\u542f\u52a8\n# \u7ee7\u7eed\u6267\u884c\u5176\u4ed6\u4ee3\u7801...\nproxy.stop()\n```\n\n### \u8be6\u7ec6\u6587\u6863\n\n\u5b8c\u6574\u7684 API \u4f7f\u7528\u6307\u5357\u8bf7\u53c2\u8003\uff1a[API_USAGE.md](https://github.com/Huang-Jacky/UProxier/blob/main/API_USAGE.md)\n\n\u5305\u542b\uff1a\n- \u963b\u585e\u542f\u52a8 vs \u5f02\u6b65\u542f\u52a8\u7684\u4f7f\u7528\u573a\u666f\n- \u5b8c\u6574\u7684\u53c2\u6570\u8bf4\u660e\u548c\u793a\u4f8b\n- \u8fdb\u7a0b\u7ba1\u7406\u548c\u72b6\u6001\u68c0\u67e5\n- \u9519\u8bef\u5904\u7406\u548c\u6700\u4f73\u5b9e\u8df5\n- \u6d4b\u8bd5\u548c\u81ea\u52a8\u5316\u573a\u666f\u793a\u4f8b\n\n## \u89c4\u5219\u914d\u7f6e\n\n\u9879\u76ee\u652f\u6301\u5728 `config.yaml` \u4e2d\u5b9a\u4e49\u89c4\u5219\uff0c\u5305\u542b\u8bf7\u6c42/\u54cd\u5e94\u4fee\u6539\u3001Mock\u3001\u5ef6\u8fdf\u7b49\u3002\n\n### \u57fa\u672c\u89c4\u5219\u7ed3\u6784\n\n```yaml\n- name: \u89c4\u5219\u540d\u79f0\n  enabled: true\n  priority: 100\n  stop_after_match: false\n  match:\n    host: \"^api\\\\.example\\\\.com$\"\n    path: \"^/v1/data$\"\n    method: \"GET\"\n  request_pipeline: []  # \u8bf7\u6c42\u9636\u6bb5\u52a8\u4f5c\n  response_pipeline:    # \u54cd\u5e94\u9636\u6bb5\u52a8\u4f5c\n    - action: mock_response\n      params:\n        status_code: 200\n        content: '{\"status\": \"success\"}'\n```\n\n### \u5e38\u7528\u52a8\u4f5c\n\n**\u8bf7\u6c42\u9636\u6bb5 (request_pipeline)**\n\n- `set_header`: \u8bbe\u7f6e\u8bf7\u6c42\u5934\n- `remove_header`: \u5220\u9664\u8bf7\u6c42\u5934\n- `rewrite_url`: URL \u91cd\u5199\n- `redirect`: \u91cd\u5b9a\u5411\u8bf7\u6c42\n\n**\u54cd\u5e94\u9636\u6bb5 (response_pipeline)**\n\n- `mock_response`: \u5b8c\u5168\u66ff\u6362\u54cd\u5e94\n- `set_status`: \u8bbe\u7f6e\u72b6\u6001\u7801\n- `set_header`: \u8bbe\u7f6e\u54cd\u5e94\u5934\n- `replace_body`: \u54cd\u5e94\u4f53\u66ff\u6362\n- `delay`: \u5ef6\u8fdf\u54cd\u5e94\n\n### \u67e5\u770b\u793a\u4f8b\n\n```bash\nuproxier examples --list          # \u5217\u51fa\u6240\u6709\u793a\u4f8b\nuproxier examples --readme        # \u67e5\u770b\u793a\u4f8b\u8bf4\u660e\nuproxier examples --copy 01_set_header.yaml  # \u590d\u5236\u793a\u4f8b\n```\n\n## Web \u754c\u9762\n\n\u8bbf\u95ee `http://<\u672c\u673aIP>:8002` \u67e5\u770b Web \u754c\u9762\uff0c\u529f\u80fd\u5305\u62ec\uff1a\n\n- \ud83d\udcca \u5b9e\u65f6\u6d41\u91cf\u7edf\u8ba1\n- \ud83d\udccb \u8bf7\u6c42/\u54cd\u5e94\u8be6\u60c5\n- \ud83d\udd0d \u6d41\u91cf\u641c\u7d22\n- \ud83d\udcbe \u6570\u636e\u5bfc\u51fa\n\n## \u8bc1\u4e66\u7ba1\u7406\n\n### \u81ea\u52a8\u5b89\u88c5\n\n```bash\nuproxier cert\n# \u9009\u62e9 \"\u5b89\u88c5\u8bc1\u4e66\u5230\u7cfb\u7edf\"\n```\n\n### \u624b\u52a8\u5b89\u88c5\n\n\u26a0\ufe0f **\u91cd\u8981\u63d0\u9192**\uff1a\u53ea\u5b89\u88c5\u8bc1\u4e66\u6587\u4ef6\uff0c\u4e0d\u8981\u5b89\u88c5\u5305\u542b\u79c1\u94a5\u7684\u6587\u4ef6\uff01\n\n**\u8bc1\u4e66\u6587\u4ef6\u4f4d\u7f6e**\uff1a`~/.uproxier/`\n\n- `mitmproxy-ca-cert.pem` - PEM \u683c\u5f0f\u8bc1\u4e66\uff08\u63a8\u8350\uff09\n- `mitmproxy-ca-cert.der` - DER \u683c\u5f0f\u8bc1\u4e66\n\n**\u5b89\u88c5\u547d\u4ee4**\uff1a\n\n```bash\n# macOS\nsecurity add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ~/.uproxier/mitmproxy-ca-cert.pem\n\n# Windows\ncertutil -addstore -f ROOT ~/.uproxier/mitmproxy-ca-cert.der\n\n# Linux\nsudo cp ~/.uproxier/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy-ca.crt\nsudo update-ca-certificates\n```\n\n## \u6545\u969c\u6392\u9664\n\n### \u5e38\u89c1\u95ee\u9898\n\n1. **\u5b89\u88c5\u540e uproxier \u547d\u4ee4\u4e0d\u53ef\u7528**\n   ```bash\n   # \u5982\u679c\u4f7f\u7528 pyenv\uff0c\u68c0\u67e5\u7248\u672c\u8bbe\u7f6e\n   pyenv global 3.10.6  # \u66ff\u6362\u4e3a\u4f60\u7684 Python \u7248\u672c\n   \n   # \u786e\u4fdd Python bin \u76ee\u5f55\u5728 PATH \u4e2d\n   export PATH=\"$(python3 -c \"import sys; print(sys.executable.replace('python3', ''))\"):$PATH\"\n   ```\n\n2. **\u8bc1\u4e66\u9519\u8bef**\n    - \u786e\u4fdd\u8bc1\u4e66\u5df2\u6b63\u786e\u5b89\u88c5\u5230\u7cfb\u7edf\n    - \u91cd\u65b0\u751f\u6210\u8bc1\u4e66\uff1a`uproxier cert`\n\n3. **\u7aef\u53e3\u88ab\u5360\u7528**\n    - \u4f7f\u7528\u4e0d\u540c\u7684\u7aef\u53e3\uff1a`uproxier start --port 8003`\n\n4. **\u89c4\u5219\u4e0d\u751f\u6548**\n    - \u68c0\u67e5\u89c4\u5219\u914d\u7f6e\u662f\u5426\u6b63\u786e\n    - \u786e\u8ba4\u89c4\u5219\u5df2\u542f\u7528\n    - \u67e5\u770b\u65e5\u5fd7\u8f93\u51fa\n\n5. **HTTPS \u8fde\u63a5\u5931\u8d25**\n    - \u786e\u4fdd\u8bc1\u4e66\u5df2\u5b89\u88c5\n    - \u68c0\u67e5\u6d4f\u89c8\u5668\u4ee3\u7406\u8bbe\u7f6e\n\n## \u8bb8\u53ef\u8bc1\n\nMIT License\n\n## \u53c2\u8003\n\n- [mitmproxy](https://mitmproxy.org/)\n- [GitHub \u4ed3\u5e93](https://github.com/Huang-Jacky/UProxier)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "HTTP/HTTPS proxy with rules engine and web UI",
    "version": "0.1.7",
    "project_urls": null,
    "split_keywords": [
        "proxy",
        " mitmproxy",
        " sse",
        " rules",
        " mock",
        " http",
        " https"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6e17383c767a8fca37ebca178bb463da3315b6964b22e1589eeb7a5843ff43ba",
                "md5": "dc31d9b9aed19faa2569264a55f6614e",
                "sha256": "78bdbd9c512e9debaa68632b6a49f2c1c111befa18f5bf79adf4f658f8a74dd9"
            },
            "downloads": -1,
            "filename": "uproxier-0.1.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "dc31d9b9aed19faa2569264a55f6614e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 66727,
            "upload_time": "2025-09-11T15:31:37",
            "upload_time_iso_8601": "2025-09-11T15:31:37.996973Z",
            "url": "https://files.pythonhosted.org/packages/6e/17/383c767a8fca37ebca178bb463da3315b6964b22e1589eeb7a5843ff43ba/uproxier-0.1.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cfe86e77fa62b8a5417fd6702532bc63ff47380066d04c4c44311ac651460fa8",
                "md5": "6a3582fb18e192a6ccb55ce4baa5f93e",
                "sha256": "79b46ec343f1cd2a6f74a158838e73ceb228bc18b8f1ac2a64b83f0c4f522a9a"
            },
            "downloads": -1,
            "filename": "uproxier-0.1.7.tar.gz",
            "has_sig": false,
            "md5_digest": "6a3582fb18e192a6ccb55ce4baa5f93e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 65850,
            "upload_time": "2025-09-11T15:31:50",
            "upload_time_iso_8601": "2025-09-11T15:31:50.777700Z",
            "url": "https://files.pythonhosted.org/packages/cf/e8/6e77fa62b8a5417fd6702532bc63ff47380066d04c4c44311ac651460fa8/uproxier-0.1.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-11 15:31:50",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "uproxier"
}
        
Elapsed time: 3.94090s