重构代理池系统:简化架构并增强核心功能

后端变更:
- 移除 tasks_manager.py 和 core/auth.py,简化架构
- 新增 core/scheduler.py 验证调度器,替代原有任务管理
- 大幅优化 api_server.py:统一错误处理、增强参数验证、支持调度器控制
- validator.py 增强 SOCKS4/SOCKS5 代理验证支持
- config.py 清理废弃配置(WebSocket、API Key、认证开关)
- SQLite 数据库操作性能优化

前端变更:
- 移除任务管理页面 (CrawlerTasks) 和 WebSocket 相关代码
- 路由简化为 4 个核心页面:总览、代理列表、插件管理、设置
- 提取前端工具函数(clipboard、confirm、format)和 API 类型定义
- 优化 CSS 架构:完善 variables、utilities、element-plus 样式
- Dashboard、Plugins、ProxyList、Settings 页面 UI/UX 优化
- App.vue 响应式侧边栏和页面过渡动画优化

其他:
- 移除 PowerShell 启动脚本,简化 Windows 批处理脚本
- 新增 README_SOCKS.md SOCKS 代理支持文档
- .env.example 和 .gitignore 更新
This commit is contained in:
祀梦
2026-04-02 11:23:23 +08:00
parent b5932a95b2
commit a79f78b338
47 changed files with 3748 additions and 3190 deletions

107
README.md
View File

@@ -5,22 +5,21 @@
## 🌟 特性
- 🔮 **科技风设计** - 现代化的深色科技主题
- 📊 **实时监控** - WebSocket 实时推送任务进度
- 📊 **实时监控** - 自动统计代理池状态
- 🎯 **智能管理** - 代理查询、筛选、排序、批量操作
- 📥 **多格式导出** - 支持 CSV、TXT、JSON 格式
- **定时任务** - 自动定期更新代理池
- **自动验证** - 自动验证代理可用性并评分
- 🚀 **高性能** - 异步爬取和验证,支持高并发
## 📦 技术栈
### 后端
- **框架**: FastAPI (端口 8923)
- **框架**: FastAPI (端口 9949)
- **数据库**: SQLite + aiosqlite
- **异步**: asyncio
- **实时通信**: WebSocket
### 前端
- **框架**: Vue 3 + Vite (端口 6173)
- **框架**: Vue 3 + Vite (端口 9948)
- **UI库**: Element Plus
- **状态管理**: Pinia
- **图表**: ECharts
@@ -72,32 +71,27 @@ stop.bat
### 4. 访问 WebUI
打开浏览器访问:**http://localhost:6173**
打开浏览器访问:**http://localhost:9948**
## 📁 项目结构
```
ProxyPool/
├── api_server.py # FastAPI 后端服务器
├── tasks_manager.py # 任务管理器
├── main.py # 爬虫主程序
├── config.py # 配置文件
├── requirements.txt # Python 依赖
├── .env.example # 环境变量示例
├── config.py # 配置文件
├── requirements.txt # Python 依赖
├── .env.example # 环境变量示例
├── script/ # 启动脚本
│ ├── start.bat # Windows 启动脚本
── start.ps1 # PowerShell 启动脚本
│ ├── stop.bat # Windows 停止脚本
│ └── README.md # 脚本说明文档
── stop.bat # Windows 停止脚本
├── core/ # 核心模块
│ ├── crawler.py # 爬虫基类
│ ├── validator.py # 代理验证器
│ ├── sqlite.py # 数据库管理
│ ├── plugin_manager.py # 插件管理器
── log.py # 日志配置
│ └── auth.py # 认证模块
── log.py # 日志配置
├── plugins/ # 代理源插件
│ ├── fate0.py # Fate0 代理源
@@ -115,12 +109,9 @@ ProxyPool/
│ │ ├── views/ # 页面组件
│ │ ├── router/ # 路由配置
│ │ ├── components/ # 通用组件
│ │ ├── App.vue
│ │ ├── main.js
│ │ └── style.css # 全局样式
│ ├── index.html
── package.json
│ └── vite.config.js
── package.json
└── db/ # 数据存储目录
└── proxies.sqlite # SQLite 数据库
@@ -151,46 +142,50 @@ POST /api/proxies
GET /api/proxies/random
```
### 启动爬虫
### 导出代理
```
POST /api/crawler/start
GET /api/proxies/export/{format}
# format: csv, txt, json
```
### 停止爬虫
### 删除代理
```
POST /api/crawler/stop
DELETE /api/proxies/{ip}/{port}
```
### 定时任务
### 批量删除代理
```
POST /api/scheduler
GET /api/scheduler
POST /api/proxies/batch-delete
```
### WebSocket 连接
### 清理无效代理
```
ws://localhost:8923/ws
DELETE /api/proxies/clean-invalid
```
### 插件列表
```
GET /api/plugins
```
### 切换插件状态
```
PUT /api/plugins/{plugin_id}/toggle
```
### 执行插件爬取
```
POST /api/plugins/{plugin_id}/crawl
```
### 系统设置
```
GET /api/settings
POST /api/settings
```
## 🐛 调试指南
### 任务进度不显示?
1. **检查 WebSocket 连接**
- 打开浏览器控制台F12
- 查看 Console 标签
- 应该看到 "WebSocket连接成功啦~"
- 应该看到 "收到WebSocket消息:" 日志
2. **检查后端任务**
- 查看后端终端输出
- 确认任务正在运行
- 查看是否有错误日志
3. **检查插件可用性**
- 确保 `plugins/` 目录下有插件文件
- 插件能正常抓取代理
### 数据不更新?
1. **检查数据库**
@@ -200,10 +195,10 @@ ws://localhost:8923/ws
2. **手动测试 API**
```bash
# 获取统计信息
curl http://localhost:8923/api/stats
curl http://localhost:9949/api/stats
# 获取代理列表
curl -X POST http://localhost:8923/api/proxies \
curl -X POST http://localhost:9949/api/proxies \
-H "Content-Type: application/json" \
-d '{"page": 1, "page_size": 20}'
```
@@ -215,19 +210,19 @@ ws://localhost:8923/ws
## 📝 配置说明
### 爬虫配置
- **最大并发数**: 10-500默认 200
### 代理验证配置
- **验证超时**: 3-30秒默认 5秒
- **验证线程数**: 10-200默认 50
- **验证并发数**: 10-200默认 50
### 定时任务
- **执行间隔**: 10-1440分钟默认 60分钟
- **自动清理**: 可选,清理无效代理
### 评分机制
- **验证成功**: +10 分
- **验证失败**: -5 分
- **分数为 0**: 自动删除
## 🔧 常见问题
### Q: 启动后端口被占用?
A: 修改 `api_server.py` 最后一行的端口号(默认8923)或 `frontend/vite.config.js` 中的端口号(默认6173
A: 修改 `config.py` 的端口号(默认9949)或 `frontend/vite.config.js` 中的端口号(默认9948
### Q: 爬虫无法抓取代理?
A: 检查网络连接,确保能访问目标网站,或尝试更换代理源插件
@@ -236,7 +231,7 @@ A: 检查网络连接,确保能访问目标网站,或尝试更换代理源
A: 增加验证超时时间,或减少并发验证数量
### Q: 数据库文件在哪里?
A: 默认在 `db/proxies.sqlite`,可在 `core/sqlite.py` 中修改 `db_path`
A: 默认在 `db/proxies.sqlite`,可在 `config.py` 中修改 `DB_PATH`
### Q: 如何清空数据库?
A: 运行命令 `python -c "from core.sqlite import SQLiteManager; import asyncio; asyncio.run(SQLiteManager().clear_all())"`