目 录CONTENT

文章目录

【开源】创建自动签到系统—QD框架

焱
2025-01-03 / 0 评论 / 0 点赞 / 24 阅读 / 0 字
温馨提示:
本文最后更新于2025-01-03,若内容或图片失效,请留言反馈。 部分素材来自网络,若有影响到您的利益,请联系我们删除。

1. 介绍

QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。
主要通过抓包获取到HAR来制作任务模板,从而实现异步响应和发起HTTP请求

2. 需要环境

2.1 硬件需求

CPU:至少1核
内存:推荐 ≥ 1G
硬盘:推荐 ≥ 2G

2.2 软件需求

需要Linux系统,Docker、Docker-Compose,环境安装见《必备的Docker和Dockercompose环境安装》,本安装环境均基于Debian11。

3.部署

3.1 Docker-Compose方式安装

# 切换到root权限
sudo -i
# 创建数据文件夹
mkdir /etc/docker/qd && cd /etc/docker/qd
```bash
# 编辑docker-compose文件
vim docker-compose.yaml     
```bash
version: "3"

services:
  qd:
    image: qdtoday/qd:latest
    # image: qdtoday/qd:lite-latest # 精简版
    # image: qdtoday/qd:dev # 开发版
    container_name: qd
    restart:unless-stopped
    depends_on:
      - redis
    ports:
      - "8923:80" # 修改端口,作为访问端口
    volumes:
      - "./config:/usr/src/app/config" # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 config 目录,用于存放数据,如果不存在的话,会自动创建
    environment:
      # - QD_DEBUG=False        # 是否启用debug模式
      # - BIND=0.0.0.0          # 监听地址
      # - PORT=80               # 监听端口
      # - MULTI_PROCESS=False   # 是否启用多进程模式,Windows平台无效
      # - AUTO_RELOAD=False     # 是否启用自动热加载,多线程模式启动时该模式无效
      # - GZIP=True
      # - ACCESS_LOG=True
      # - DISPLAY_IMPORT_WARNING=True
      # - USER0ISADMIN=True     # 第一个注册用户为管理员
      # - STATIC_URL_PREFIX=/static/      # 静态文件URL前缀
      - DOMAIN=                           # 指定访问域名,(建议修改), 否则通过邮件重置密码及邮箱推送等功能无效
      # - COOKIE_DAY=5                    # Cookie在客户端中保留的天数
      # - COOKIE_SECURE_MODE=False
      - COOKIE_SECRET=binux               # cookie加密密钥
      - PBKDF2_ITERATIONS=400
      - AES_KEY=binux                     # AES加密密钥
      # - DB_TYPE=sqlite3                 # 需要使用MySQL时设置为'mysql'
      # - JAWSDB_MARIA_URL=mysql://user:pass@localhost:3306/dbname?auth_plugin=     # 需要使用MySQL时,设置为 (mysql://用户名:密码@hostname:port/数据库名?auth_plugin=)
      # - QD_SQL_LOGGING_NAME=QD.sql      # SQLAlchmey 日志名称, 默认为 'QD.sql'
      # - QD_SQL_LOGGING_LEVEL=WARNING    # SQLAlchmey 日志级别, 默认为 'Warning'
      # - QD_SQL_POOL_LOGGING_NAME=QD.sql.pool      # SQLAlchmey 连接池日志名称,默认为 'QD.sql.pool'
      # - QD_SQL_POOL_LOGGING_LEVEL=WARNING         # SQLAlchmey 连接池日志级别, 默认为'Warning'
      # - QD_SQL_POOL_SIZE=5                        # SQLAlchmey 连接池大小, 默认为 10
      # - QD_SQL_MAX_OVERFLOW=10                    # SQLAlchmey 连接池最大溢出, 默认为 50
      # - QD_SQL_POOL_PRE_PING=True                 # 是否在连接池获取连接前,先ping一下, 默认为 True
      # - QD_SQL_POOL_RECYCLE=3600                  # SQLAlchmey 连接池回收时间, 默认为 3600
      # - QD_SQL_POOL_TIMEOUT=30                    # SQLAlchmey 连接池超时时间, 默认为 60
      # - QD_SQL_POOL_USE_LIFO=True                 # SQLAlchmey 是否使用 LIFO 算法, 默认为 True
      - REDISCLOUD_URL=redis://redis:6379           # 需要使用Redis或RedisCloud时,设置为 http://rediscloud:密码@hostname:port
      # - REDIS_DB_INDEX=1
      # - QD_EVIL=1000                              # 用户在1小时内失败分数阈值(次数*分数)
      # - EVIL_PASS_LAN_IP=True       # 是否关闭本机私有IP地址用户及localhost_API请求的evil限制
      # - WORKER_METHOD=Queue     # 任务定时执行方式,默认为 Queue, Batch为旧版本执行方式,性能弱
      # - QUEUE_NUM=50
      # - CHECK_TASK_LOOP=500
      # - TASK_MAX_RETRY_COUNT=8
      # - NEW_TASK_DELAY=1          # 新建任务后准备时间, 单位为秒, 默认为1秒
      # - TASK_WHILE_LOOP_TIMEOUT=900   # 任务运行中单个 While 循环最大运行时间,单位为秒, 默认为 15 分钟
      # - TASK_REQUEST_LIMIT=1500   # 任务运行中单个任务最大请求次数,默认为 1500 次
      # - DOWNLOAD_SIZE_LIMIT=5242880
      # - REQUEST_TIMEOUT=30.0
      # - CONNECT_TIMEOUT=30.0
      # - DELAY_MAX_TIMEOUT=29.9
      # - UNSAFE_EVAL_TIMEOUT=3.0
      # - USE_PYCURL=True           # 是否启用Pycurl模组
      # - ALLOW_RETRY=True          # 在Pycurl环境下部分请求可能导致Request错误时,自动修改冲突设置并重发请求
      # - DNS_SERVER=               # 通过Curl使用指定DNS进行解析(仅支持Pycurl环境),如 8.8.8.8
      # - CURL_ENCODING=True        # 是否允许使用Curl进行Encoding操作
      # - CURL_CONTENT_LENGTH=True    # 是否允许Curl使用Headers中自定义Content-Length请求
      # - NOT_RETRY_CODE=301|302|303|304|305|307|400|401|403|404|405|407|408|409|410|412|415|413|414|500|501|502|503|504|599
      # - EMPTY_RETRY=True
      # - TRACEBACK_PRINT=False
      # - PUSH_PIC_URL=https://gitee.com/qd-today/qd/raw/master/web/static/img/push_pic.png
      # - PUSH_BATCH_SW=True      # 是否允许开启定期推送 QD 任务日志, 默认为True
      # - PUSH_BATCH_DELTA=60
      # - WS_PING_INTERVAL=5      # WebSocket ping间隔, 单位为秒, 默认为 5s
      # - WS_PING_TIMEOUT=30      # WebSocket ping超时时间, 单位为秒, 默认为 30s
      # - WS_MAX_MESSAGE_SIZE=10485760  # WebSocket 单次接收最大消息大小, 默认为 10MB
      # - WS_MAX_QUEUE_SIZE=100       # WebSocket 最大消息队列大小, 默认为 100
      # - WS_MAX_CONNECTIONS_SUBSCRIBE=30    # WebSocket 公共模板更新页面最大连接数, 默认为 30
      - SUBSCRIBE_ACCELERATE_URL=jsdelivr_fastly #订阅加速方式地址 jsdelivr_fastly/ghproxy/fastgit,默认为: jsdelivr_cdn
      # - PROXIES=                        # 全局代理域名列表
      # - PROXY_DIRECT_MODE=regexp        # 全局代理黑名单模式,默认不启用"url"为网址,"regexp"正则表达式
      # - PROXY_DIRECT=(?xi)\A([a-z][a-z0-9+\-.]*://)?(0(.0){3}|127(.0){2}.1|localhost|\[::([\d]+)?\])(:[0-9]+)?              # 全局代理黑名单匹配规则
      # - EXTRA_ONNX_NAME=               # config目录下自定义ONNX文件名
      # - EXTRA_CHARSETS_NAME=           # config目录下自定义ONNX对应自定义charsets.json文件名
      # - MAIL_SMTP=                    # 邮箱SMTP服务器
      # - MAIL_PORT=465                 # 邮箱SMTP服务器端口
      # - MAIL_SSL=True
      # - MAIL_USER=                    # 邮箱用户名
      # - MAIL_PASSWORD=                # 邮箱密码
      # - MAIL_FROM=${MAIL_USER}        # 发送时使用的邮箱,默认与MAIL_USER相同
      # - MAIL_DOMAIN_HTTPS=False   # 发送的邮件链接启用HTTPS,非框架前端使用HTTPS,如果前端需要HTTPS, 请使用反向代理.
      # - MAILGUN_KEY=
      # - MAILGUN_DOMAIN=${DOMAIN}
      # - GA_KEY=

  redis:
    image: redis:alpine
    container_name: redis
    command: ["--loglevel warning"]
    # command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      # - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:rw
      - ./redis/data:/data:rw

复制上述配置文件内容,shift+ins 粘贴文本后,输入 :wq 退出保存

#启动安装服务
docker-compose up -d

3.2 Docker安装

# 切换到root权限
sudo -i
# 创建数据文件夹
mkdir /etc/docker/qd && cd /etc/docker/qd
```bash
docker run -d --name qd -p 8923:80 -v /etc/docker/qd/config:/usr/src/app/config qdtoday/qd

容器内部无法连通外部网络时尝试该命令

# 使用 Host 网络模式创建容器, 端口号: 8923
docker run -d --name qd --env PORT=8923 --net=host -v /etc/docker/qd/config:/usr/src/app/config qdtoday/qd

注意: 使用该命令创建容器后, 请将模板里 http://localhost/ 形式的 api 请求, 手动改成 api:// 或 http://localhost:8923/ 后, 才能正常完成相关API请求。

请勿同时运行新旧版 QD 框架, 或将不同运行中的 QD 容器数据库映射为同一文件。
这里还是推荐采用Docker-Compose方式安装。

4.使用说明

4.1 获取HAR

HAR(HTTP 归档) 是多种 HTTP 会话工具用来导出所记录数据的 一种文件格式。 这种格式基本上是 JSON 对象,并具有一组特定的字段。
HAR 文件包含敏感数据。录制过程中所下载网页中的内容。录制过程中的所有信息: cookie、个人详细信息、密码、信用卡号码等。

注意:并非所有 HAR 格式的字段都是必填字段, 很多时候,部分信息不会保存到文件中。
谷歌HAR分析工具 https://toolbox.googleapps.com/apps/har_analyzer/?lang=zh_CN
第三方HAR分析工具 http://www.softwareishard.com/har/viewer/

4.2 抓包

4.2.1. Chrome 或 Edge

  1. 按 F12 、 Ctrl + Shift + I ,或从 Chrome 菜单中选择 更多工具 > 开发者工具 。
  2. 从屏幕底部或右侧打开的面板中,选择 网络 选项卡。确保 网络 选项卡左上角的 录制 按钮显示为 红色。选中 保留日志 旁边的框。

  1. 单击 清除 按钮以清除 网络 选项卡中的所有现有日志。现在尝试重现您计划发起的 HTTP 请求。
    重现任务后,右键单击网络请求网格上的任意位置。选择 另存为带内容的 HAR。

4.2.2 Windows - Fiddler

1.打开 Fiddler,打开 Tools 菜单,选择 Options。
2.选择 HTTPS 选项卡 ,勾选 Capture HTTPS Connects 。
3.选择 连接 选项卡,选中 解密 HTTPS 流量 。
4.现在尝试重现您计划发起的 HTTP 请求。
5.导出为 HAR 格式 - 请选择 HTTPArchive 作为导出方式。

4.3 公共模板

  1. 点击 我的模板 右侧的 社区模板 按钮。
  2. 更新存储库以获取最新的 HAR 文件列表。
  3. 选择你要使用的HAR文件,点击 Subscribe 按钮订阅模板。
  4. 根据需要修改模板。
  5. 然后跳到 3.编辑模板 继续编辑。

5. 上传HAR文件

点击 我的模板 右侧的 + 按钮 → 上传刚刚保存的 HAR 文件 → 点击 上传 继续。

6. 编辑模板

将用户名、密码、cookie、header 等根据用户变化的部分替换成类似 {{ username }} 的模板。(模板支持 jinja2 语法)
在请求编辑中使用测试面板测试模板是否正确返回,使用正确和错误的用户名进行测试。
填写 成功/失败断言,这有助于检测模板任务是否运行失败。
当请求中需要上一次请求的一些数据时,使用变量抽取,通过正则化抽取数据,保存在环境变量中。使用组选择器 ab(\w+)cd 选择其中的一部分。
使用 log 提取任务日志。
当所有请求编辑完成后,使用下载按钮旁边的 测试 来测试整体。
正在编辑的模板会自动保存在浏览器缓存中,不用担心丢失。
单击 保存 按钮保存模板。
单击 下载 按钮下载模板。

创建定时任务
点击 我的任务 右侧的 + 按钮 → 选择刚刚创建的模板 → 填写任务变量,任务间隔、任务组和任务执行时间 → 单击 测试 按钮测试任务 → 单击保存按钮保存任务。

批量修改
在左上角我的任务下方有一排设置栏可以批量修改多个任务的启用、禁用、定时、删除。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区