QD [v20240210] —— HTTP请求定时任务自动执行框架 base on HAR Editor and Tornado Server
# QD 项目指南
## 项目概述
QD 是一个基于 HAR Editor 和 Tornado Server 的 HTTP 请求定时任务自动执行框架,用于自动化 HTTP 请求任务。该项目使用 Python 构建,支持定时任务调度、请求模板管理和会话管理等功能。
## 架构
QD 项目的主要组件包括:
1. **Web 服务器**:基于 Tornado 的异步 web 服务器,提供 Web UI 和 API
2. **任务调度系统**:管理和执行定时任务,基于 APScheduler
3. **请求执行引擎**:Fetcher 负责执行 HTTP 请求,处理模板和环境变量
4. **数据存储**:支持多种数据库后端(如 SQLite、MySQL、PostgreSQL)
5. **Push 系统**:支持通过多种渠道(如 Telegram、钉钉等)推送通知
## 核心组件
- `qd.py`: 命令行入口,用于执行单个 HAR 模板
- `run.py`: 启动 Web 服务的入口点
- `libs/fetcher.py`: 核心请求执行引擎,处理 HTTP 请求执行和结果解析
- `libs/utils.py`: 通用工具函数
- `web/handlers/`: Web 请求处理程序,包含各种功能的路由处理
- `web/tpl/`: 前端模板文件
- `config.py`: 应用程序配置,定义系统全局设置和参数
## 工作流程
### 开发环境设置
1. 克隆仓库
2. 安装依赖 (推荐使用 pipenv)
```bash
pipenv install
```
3. 配置 `config.py`
4. 运行 `run.py` 启动服务器
```bash
python run.py
```
### 模板执行
模板执行可以通过命令行或 Web UI 完成:
```bash
python qd.py tpl.har [--key=value] [env.json]
```
其中:
- `tpl.har` 是 HAR 格式的请求模板
- `--key=value` 设置环境变量
- `env.json` 是包含环境变量的配置文件
### 代码约定
- **异步处理**:项目广泛使用 `asyncio` 进行异步操作,大部分 handler 和核心函数都是异步的
- **日志记录**:使用 `libs/log.py` 中的 Log 类进行日志记录,支持多种输出级别
- **错误处理**:根据 `config.traceback_print` 决定是否打印详细错误堆栈
- **环境变量**:模板中的变量使用 `{{ variable }}` 语法,在执行时会被替换
## 关键功能实现
### HAR 请求解析和执行
`libs/fetcher.py` 中的 Fetcher 类负责解析 HAR 文件并执行请求。它支持:
- 变量替换与渲染
- 会话管理与 Cookie 处理
- 结果提取与响应处理
- 错误重试机制
### 任务调度
任务调度使用 APScheduler 实现,在 `web/handlers/task.py` 中定义。定时任务支持:
- Cron 表达式定义执行时间
- 灵活的任务参数设置
- 任务日志记录与状态跟踪
### 消息推送
`libs/push.py` 实现了多种推送渠道,包括:
- Telegram
- 钉钉
- 企业微信
- Bark
- Serverchan 等
## 扩展和集成
- 可以通过 Docker 部署:项目提供了完整的 Docker 支持
```bash
docker build -t qd .
docker run -d -p 8923:8923 qd
```
- 支持自定义插件扩展功能(在 `libs/handler.py` 中扩展)
- 支持 WebUI 与 CLI 两种使用方式
## 调试技巧
- 启用调试日志:修改 config.py 中的 `debug` 为 `True`
- 单独测试请求:使用 `python qd.py` 命令行工具测试单个模板
- 查看任务日志:通过 Web UI 的任务页面访问详细执行记录
## 常见问题
- 端口冲突:`qd.py` 会检查端口是否被占用,如果被占用会自动启动服务
- 会话管理:请求之间的会话状态通过环境变量中的 `session` 字段维护
- 数据库连接问题:确保 `config.py` 中的数据库配置正确
## 参考文件
- `README.md`: 项目的主要文档
- `CHANGELOG.md`: 项目更新日志
- `/web/docs/`: 详细的用户指南