| Name | uproxier JSON |
| Version |
0.1.13
JSON |
| download |
| home_page | None |
| Summary | HTTP/HTTPS proxy with rules engine and web UI |
| upload_time | 2025-10-11 02:39:01 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.8 |
| license | None |
| 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 解密开关(配置或 CLI 覆盖)
- 🛡️ **证书管理**: 自动生成/校验/安装 mitmproxy CA 证书
- 📋 **规则引擎**: 多动作叠加、优先级、命中短路(stop_after_match)
- mock_response(支持本地文件 file)/ modify_headers / modify_content / redirect
- modify_response_headers / modify_response_content / modify_status
- delay_response(真实延迟发送)/ conditional_response(条件分支)
- 配置继承(extends)支持,相对路径自动解析
- 💾 **持久化**: 可将抓到的请求以 JSONL 持久化(--save,覆盖模式)
- 🌐 **Web 界面**: 实时流量、点击行查看详情、搜索、清空,完全离线化
- 🎯 **CLI 工具**: start/init/cert/version/examples/validate & 静默模式(--silent)
- 📊 **抓包控制**: 流媒体/大文件开关、阈值与二进制保存控制(通过 config.yaml 配置)
- 🔧 **配置管理**: 统一配置目录(~/.uproxier/),YAML 配置 + CLI 覆盖
- ✅ **配置验证**: 完整的配置验证系统,检查语法、类型、文件存在性等
## 安装
```bash
pip install uproxier
```
### 依赖要求
- Python 3.8+
- OpenSSL (用于证书生成)
## 快速开始
### 1. 启动代理
```bash
uproxier start
```
首次启动会自动在用户目录生成 `~/.uproxier/certificates/` CA 证书;启动面板将显示证书路径与有效期。
### 2. 安装证书
**Web 界面下载**:打开 Web 界面右上角"扫码下载证书",移动设备用浏览器访问下载链接安装(下载的是 DER 格式,文件名为 `uproxier-ca.cer`)。
**命令行安装**:
```bash
uproxier cert
# 选择安装到系统,或按提示手动安装
```
### 3. 配置代理
在需要抓包的设备/浏览器里设置 HTTP(S) 代理为本机 IP 与启动端口。
## 使用说明
### 命令行工具
#### 帮助信息
```bash
uproxier --help
uproxier start --help # 查看启动命令的所有参数
uproxier examples --help # 查看示例管理命令的所有参数
uproxier cert --help # 查看证书管理命令的所有参数
uproxier init --help # 查看初始化命令的所有参数
uproxier info --help # 查看版本信息命令的所有参数
uproxier validate --help # 查看配置验证命令的所有参数
```
#### 全局选项
```bash
uproxier --verbose # 详细输出
uproxier --config <path> # 指定配置文件路径
uproxier --version # 显示版本信息
```
#### 主要命令
**启动代理服务器**
```bash
uproxier start \
--port 8001 \ # 代理服务器端口
--web-port 8002 \ # Web 界面端口
--config <path> \ # 配置文件路径(可选,默认使用 ~/.uproxier/config.yaml)
--save ./logs/traffic.jsonl \ # 保存请求数据到文件(JSONL格式)
--enable-https \ # 启用 HTTPS 解密(覆盖配置)
--disable-https \ # 禁用 HTTPS 解密(覆盖配置)
--silent # 静默模式,不输出任何信息
--daemon # 后台模式启动
```
**证书管理**
```bash
uproxier cert # 管理证书(生成、安装、清理)
```
**服务器控制**
```bash
uproxier status # 查看服务器状态
uproxier stop # 停止后台运行的服务器
```
**初始化配置**
```bash
uproxier init --config <path> # 指定配置文件路径
```
**版本信息**
```bash
uproxier info # 显示版本信息
```
**配置验证**
```bash
uproxier validate <config_file> # 验证配置文件
uproxier validate <config_file> --validate-only # 只进行验证,不生成完整报告
uproxier validate <config_file> --format json # 输出 JSON 格式报告
uproxier validate <config_file> --output report.txt # 保存报告到文件
```
**规则示例管理**
```bash
uproxier examples --list # 列出所有可用示例
uproxier examples --readme # 显示示例说明文档
uproxier examples --show <文件名> # 显示指定示例内容
uproxier examples --copy <文件名> # 复制示例到当前目录
```
## API 使用
UProxier 提供了完整的 Python API,支持阻塞和非阻塞两种启动方式。
### 快速示例
**阻塞启动**:
```python
from uproxier.proxy_server import ProxyServer
proxy = ProxyServer("config.yaml")
proxy.start(8001, 8002) # 阻塞启动,监听 0.0.0.0:8001
```
**异步启动**:
```python
from uproxier.proxy_server import ProxyServer
proxy = ProxyServer("config.yaml", silent=True)
proxy.start_async(8001, 8002) # 非阻塞启动,监听 0.0.0.0:8001
# 继续执行其他代码...
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 界面,功能包括:
- 📊 实时流量统计
- 📋 请求/响应详情
- 🔍 流量搜索
- 💾 数据导出(/api/export?format=json|jsonl|csv&limit=1000)
## 证书管理
### 自动安装
```bash
uproxier cert
# 选择 "安装证书到系统"
```
### 手动安装
⚠️ **重要提醒**:只安装证书文件,不要安装包含私钥的文件!
**证书文件位置**:`~/.uproxier/certificates/`
- `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/certificates/mitmproxy-ca-cert.pem
# Windows
certutil -addstore -f ROOT ~/.uproxier/certificates/mitmproxy-ca-cert.der
# Linux
sudo cp ~/.uproxier/certificates/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/e7/fd/68c15a5ac38a36cb0d6ad27a2c2f9cf84a1bb9ddf8c279d8ad4cd51ee6b6/uproxier-0.1.13.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\uff08\u914d\u7f6e\u6216 CLI \u8986\u76d6\uff09\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\uff08stop_after_match\uff09\n - mock_response\uff08\u652f\u6301\u672c\u5730\u6587\u4ef6 file\uff09/ modify_headers / modify_content / redirect\n - modify_response_headers / modify_response_content / modify_status\n - delay_response\uff08\u771f\u5b9e\u5ef6\u8fdf\u53d1\u9001\uff09/ conditional_response\uff08\u6761\u4ef6\u5206\u652f\uff09\n - \u914d\u7f6e\u7ee7\u627f\uff08extends\uff09\u652f\u6301\uff0c\u76f8\u5bf9\u8def\u5f84\u81ea\u52a8\u89e3\u6790\n- \ud83d\udcbe **\u6301\u4e45\u5316**: \u53ef\u5c06\u6293\u5230\u7684\u8bf7\u6c42\u4ee5 JSONL \u6301\u4e45\u5316\uff08--save\uff0c\u8986\u76d6\u6a21\u5f0f\uff09\n- \ud83c\udf10 **Web \u754c\u9762**: \u5b9e\u65f6\u6d41\u91cf\u3001\u70b9\u51fb\u884c\u67e5\u770b\u8be6\u60c5\u3001\u641c\u7d22\u3001\u6e05\u7a7a\uff0c\u5b8c\u5168\u79bb\u7ebf\u5316\n- \ud83c\udfaf **CLI \u5de5\u5177**: start/init/cert/version/examples/validate & \u9759\u9ed8\u6a21\u5f0f\uff08--silent\uff09\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\uff08\u901a\u8fc7 config.yaml \u914d\u7f6e\uff09\n- \ud83d\udd27 **\u914d\u7f6e\u7ba1\u7406**: \u7edf\u4e00\u914d\u7f6e\u76ee\u5f55\uff08~/.uproxier/\uff09\uff0cYAML \u914d\u7f6e + CLI \u8986\u76d6\n- \u2705 **\u914d\u7f6e\u9a8c\u8bc1**: \u5b8c\u6574\u7684\u914d\u7f6e\u9a8c\u8bc1\u7cfb\u7edf\uff0c\u68c0\u67e5\u8bed\u6cd5\u3001\u7c7b\u578b\u3001\u6587\u4ef6\u5b58\u5728\u6027\u7b49\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/certificates/` CA \u8bc1\u4e66\uff1b\u542f\u52a8\u9762\u677f\u5c06\u663e\u793a\u8bc1\u4e66\u8def\u5f84\u4e0e\u6709\u6548\u671f\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\uff08\u4e0b\u8f7d\u7684\u662f DER \u683c\u5f0f\uff0c\u6587\u4ef6\u540d\u4e3a `uproxier-ca.cer`\uff09\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\u9700\u8981\u6293\u5305\u7684\u8bbe\u5907/\u6d4f\u89c8\u5668\u91cc\u8bbe\u7f6e HTTP(S) \u4ee3\u7406\u4e3a\u672c\u673a IP \u4e0e\u542f\u52a8\u7aef\u53e3\u3002\n\n## \u4f7f\u7528\u8bf4\u660e\n\n### \u547d\u4ee4\u884c\u5de5\u5177\n\n#### \u5e2e\u52a9\u4fe1\u606f\n\n```bash\nuproxier --help\nuproxier start --help # \u67e5\u770b\u542f\u52a8\u547d\u4ee4\u7684\u6240\u6709\u53c2\u6570\nuproxier examples --help # \u67e5\u770b\u793a\u4f8b\u7ba1\u7406\u547d\u4ee4\u7684\u6240\u6709\u53c2\u6570\nuproxier cert --help # \u67e5\u770b\u8bc1\u4e66\u7ba1\u7406\u547d\u4ee4\u7684\u6240\u6709\u53c2\u6570\nuproxier init --help # \u67e5\u770b\u521d\u59cb\u5316\u547d\u4ee4\u7684\u6240\u6709\u53c2\u6570\nuproxier info --help # \u67e5\u770b\u7248\u672c\u4fe1\u606f\u547d\u4ee4\u7684\u6240\u6709\u53c2\u6570\nuproxier validate --help # \u67e5\u770b\u914d\u7f6e\u9a8c\u8bc1\u547d\u4ee4\u7684\u6240\u6709\u53c2\u6570\n```\n\n#### \u5168\u5c40\u9009\u9879\n\n```bash\nuproxier --verbose # \u8be6\u7ec6\u8f93\u51fa\nuproxier --config <path> # \u6307\u5b9a\u914d\u7f6e\u6587\u4ef6\u8def\u5f84\nuproxier --version # \u663e\u793a\u7248\u672c\u4fe1\u606f\n```\n\n#### \u4e3b\u8981\u547d\u4ee4\n\n**\u542f\u52a8\u4ee3\u7406\u670d\u52a1\u5668**\n\n```bash\nuproxier start \\\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\uff08\u53ef\u9009\uff0c\u9ed8\u8ba4\u4f7f\u7528 ~/.uproxier/config.yaml\uff09\n --save ./logs/traffic.jsonl \\ # \u4fdd\u5b58\u8bf7\u6c42\u6570\u636e\u5230\u6587\u4ef6\uff08JSONL\u683c\u5f0f\uff09\n --enable-https \\ # \u542f\u7528 HTTPS \u89e3\u5bc6\uff08\u8986\u76d6\u914d\u7f6e\uff09\n --disable-https \\ # \u7981\u7528 HTTPS \u89e3\u5bc6\uff08\u8986\u76d6\u914d\u7f6e\uff09\n --silent # \u9759\u9ed8\u6a21\u5f0f\uff0c\u4e0d\u8f93\u51fa\u4efb\u4f55\u4fe1\u606f\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**\u521d\u59cb\u5316\u914d\u7f6e**\n\n```bash\nuproxier init --config <path> # \u6307\u5b9a\u914d\u7f6e\u6587\u4ef6\u8def\u5f84\n```\n\n**\u7248\u672c\u4fe1\u606f**\n\n```bash\nuproxier info # \u663e\u793a\u7248\u672c\u4fe1\u606f\n```\n\n**\u914d\u7f6e\u9a8c\u8bc1**\n\n```bash\nuproxier validate <config_file> # \u9a8c\u8bc1\u914d\u7f6e\u6587\u4ef6\nuproxier validate <config_file> --validate-only # \u53ea\u8fdb\u884c\u9a8c\u8bc1\uff0c\u4e0d\u751f\u6210\u5b8c\u6574\u62a5\u544a\nuproxier validate <config_file> --format json # \u8f93\u51fa JSON \u683c\u5f0f\u62a5\u544a\nuproxier validate <config_file> --output report.txt # \u4fdd\u5b58\u62a5\u544a\u5230\u6587\u4ef6\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## 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 uproxier.proxy_server import ProxyServer\n\nproxy = ProxyServer(\"config.yaml\")\nproxy.start(8001, 8002) # \u963b\u585e\u542f\u52a8\uff0c\u76d1\u542c 0.0.0.0:8001\n```\n\n**\u5f02\u6b65\u542f\u52a8**\uff1a\n```python\nfrom uproxier.proxy_server import ProxyServer\n\nproxy = ProxyServer(\"config.yaml\", silent=True)\nproxy.start_async(8001, 8002) # \u975e\u963b\u585e\u542f\u52a8\uff0c\u76d1\u542c 0.0.0.0:8001\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\uff08/api/export?format=json|jsonl|csv&limit=1000\uff09\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/certificates/`\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/certificates/mitmproxy-ca-cert.pem\n\n# Windows\ncertutil -addstore -f ROOT ~/.uproxier/certificates/mitmproxy-ca-cert.der\n\n# Linux\nsudo cp ~/.uproxier/certificates/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.13",
"project_urls": null,
"split_keywords": [
"proxy",
" mitmproxy",
" sse",
" rules",
" mock",
" http",
" https"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "9a597a48cbca624b1ba8ecbd6cc3390f122fd654f28b9bdd1a94ff64a5d6f0f0",
"md5": "719917f70bdc722da0ebb3100f4915a5",
"sha256": "45d41afac7730a4d438690890e2b77c96818b8b5cf06cc1f63b07c250ce82ab2"
},
"downloads": -1,
"filename": "uproxier-0.1.13-py3-none-any.whl",
"has_sig": false,
"md5_digest": "719917f70bdc722da0ebb3100f4915a5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 146235,
"upload_time": "2025-10-11T02:38:59",
"upload_time_iso_8601": "2025-10-11T02:38:59.364668Z",
"url": "https://files.pythonhosted.org/packages/9a/59/7a48cbca624b1ba8ecbd6cc3390f122fd654f28b9bdd1a94ff64a5d6f0f0/uproxier-0.1.13-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e7fd68c15a5ac38a36cb0d6ad27a2c2f9cf84a1bb9ddf8c279d8ad4cd51ee6b6",
"md5": "e5155e1135b60f71ab415b5f14226c5e",
"sha256": "d36c68505929c403e3477eca938db6299c19865f078a10a03a3f0cd4cb041ccf"
},
"downloads": -1,
"filename": "uproxier-0.1.13.tar.gz",
"has_sig": false,
"md5_digest": "e5155e1135b60f71ab415b5f14226c5e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 143086,
"upload_time": "2025-10-11T02:39:01",
"upload_time_iso_8601": "2025-10-11T02:39:01.262758Z",
"url": "https://files.pythonhosted.org/packages/e7/fd/68c15a5ac38a36cb0d6ad27a2c2f9cf84a1bb9ddf8c279d8ad4cd51ee6b6/uproxier-0.1.13.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-11 02:39:01",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "uproxier"
}