乐于分享
好东西不私藏

Supreme小程序自动化抢购终端——源码架构与执行流程全解析

Supreme小程序自动化抢购终端——源码架构与执行流程全解析

平台:微信公众号 | 类型:源码级技术拆解 | 关键词:CustomTkinter、mitmproxy、GraphQL、多线程、代理策略、支付链路、桌面端架构


1. 项目概述

本系统是一套基于 Python + CustomTkinter 开发的 桌面端小程序自动化抢购终端

核心目标只有一个:把只有开发者能跑的脚本,包装成普通用户也能操作的桌面工具

它解决的不是"能不能发请求"的问题——而是下面这一整条链路能不能跑通:

参数自动捕获 → 商品多关键词检索 → sku/尺码/库存映射 → 多商品任务队列 → 定时/立即抢购 → 订单创建 → 支付参数拉取 → 本地服务生成支付链接 → 手机微信扫码付款

核心技术栈

层级
技术选型
作用
GUI 界面
CustomTkinter
现代化桌面UI,跟随系统深浅色主题
HTTP 请求
requests + curl_cffi
普通请求走 requests,支付环节走 curl_cffi 模拟 Chrome 指纹
抓包引擎
mitmproxy (mitmdump)
无头模式拦截小程序请求,自动提取 token/openId
代理管理
Windows 注册表 + 代理API
login.bat 一键启停系统代理,支持动态提取代理IP
任务调度
threading.Timer
定时抢购的轻量级调度
数据持久化
JSON (config.json)
所有参数可配置化,启动自动加载
支付桥接
本地 HTTP Server (端口4041)
接收支付参数,生成手机端可访问的支付链接

2. 整体运行流程

从用户双击桌面图标到完成付款,系统经历了 6 个核心步骤

Step 1:参数捕获(auto_catcher.py + login.bat)

用户运行 login.bat → Windows 系统代理自动指向 127.0.0.1:8080 → mitmdump 静默启动 → 用户在电脑微信打开 Supreme 小程序随意浏览 → mitmproxy 从请求头/响应体中自动提取 token 和 openId → 写入 config.json → 关闭代理窗口,系统代理自动恢复。

Step 2:环境初始化(main.py 启动)

程序读取 config.json → 自动回填 token、openId、收货地址、代理链接 → GUI 渲染完成,日志区显示"系统初始化完成"。

Step 3:商品检索

用户在"任务大厅"输入关键词(多关键词逗号分隔) → 可选开启代理 → 点击"检索商品" → 后台线程分页请求商品列表 → 关键词匹配标题 → 逐商品拉取 详情(颜色/sku映射) + 库存(尺码/可购数量) → 结果渲染到可滚动列表,每行带勾选框和尺码下拉菜单。

Step 4:任务编排

用户勾选目标商品、选择尺码 → 点击"立即抢购"或输入目标时间后点击"定时抢购" → 程序扫描所有勾选商品,组装成 任务队列

Step 5:批量下单

后台线程遍历任务队列 → 逐商品调用 GraphQL orderCreate 接口 → 请求体中完整补齐 8 个财务金额字段(含 0 值字段) → 拿到订单号 orderCode

Step 6:支付链路闭合

下单成功 → 调用 GraphQL pay 接口(走 curl_cffi 模拟 Chrome 指纹绕过 JA3 检测) → 解析微信支付参数(appId / timeStamp / nonceStr / package / signType / paySign) → POST 推送到本地端口 4041 的支付服务 → 服务返回可访问 URL → 用户复制链接到手机微信 → 跳转付款。


3. 核心文件详解

整个项目由 4 个核心文件 组成,职责边界清晰,模块间低耦合:

📌 3.1 主程序入口 —— main.py(约530行)

这是整个系统的 大脑,包含两个核心类:

类一:SupremeAPI —— 接口与业务逻辑层

与 UI 完全解耦,只接收一个 logger 回调用于输出日志。对外暴露的核心方法:

方法
功能
关键技术点
set_proxy(proxy_url)
动态获取代理IP
调用第三方API提取IP:Port,做格式校验后才赋值
search_products(keywords, token)
多关键词商品检索
分页请求 + 标题关键词匹配 + 逐商品拉详情和库存
fetch_product_details(spuCode, token)
获取商品颜色与sku映射
兼容 customSize/Size/size 多种字段名
fetch_sizes(spuCode, sku_size_map, token)
获取尺码库存
从 inventory 接口解析 availableCount
checkout(product, size_info, config)
创建订单
GraphQL mutation,完整补齐8个金额字段
fetch_pay(order_code, amount, config)
拉取支付参数并推送
curl_cffi 模拟 Chrome 110 指纹,推送到本地4041服务

最值得关注的设计细节

① 财务金额字段的"全量补齐"策略

下单接口的 orderCreate mutation 中,即使某些金额为 0,也 一个不漏地显式传入

"amount":              {"amount": price, "currencyCode""CNY"},
"productAmount":       {"amount": price, "currencyCode""CNY"},
"freight":             {"amount"0,     "currencyCode""CNY"},
"discount":            {"amount"0,     "currencyCode""CNY"},
"coupon":              {"amount"0,     "currencyCode""CNY"},
"giftCard":            {"amount"0,     "currencyCode""CNY"},
"tax":                 {"amount"0,     "currencyCode""CNY"},
"additionalServiceFee":{"amount"0,     "currencyCode""CNY"}

这不是冗余——服务端 GraphQL schema 对这些字段有非空校验,缺任何一个都会直接拒绝请求。很多脚本失败的原因不是业务逻辑错了,而是参数结构不完整。

② 支付环节的 JA3 指纹对抗

fetch_pay 方法没有继续用 requests 库,而是切换到 curl_cffi

pay_res = cffi_requests.post(
    url, headers=..., json=...,
    impersonate="chrome110",  # 模拟 Chrome 110 的 TLS 指纹
    proxies=cffi_proxies
)

原因很明确:支付接口对 TLS 握手特征做了校验。普通 requests 库的 JA3 指纹会被识别为脚本请求,直接拦截。curl_cffi 的 impersonate 参数可以伪装成真实浏览器的 TLS 指纹。

③ 尺码字段的多名兼容

if opt.get('originCode'in ['customSize''Size''size']:
    size_name = opt['value']['displayName']

不同商品的尺码字段命名不一致——有的叫 Size,有的叫 customSize,甚至有大小写差异。写死一个字段名,换个商品就失效。这里的兼容列表是一个 低成本的抗波动方案

④ 线程安全的日志输出

deflog(self, msg):
defappend():
        self.log_box.configure(state="normal")
        self.log_box.insert("end", formatted_msg)
        ...
    self.after(0, append)  # 回到主线程操作 UI

所有后台线程的日志输出,通过 self.after(0, callback) 投递回 Tkinter 主事件循环执行。这同时解决了两个问题:

  • 网络请求不阻塞 UI(后台线程执行)
  • 子线程不直接操作 GUI 控件(Tkinter 不是线程安全的)

类二:SupremeBotApp(ctk.CTk) —— GUI 界面层

继承自 customtkinter.CTk,采用 左侧导航栏 + Tab 页切换 + 底部日志区 的经典布局:

┌──────┬──────────────────────────────────┐
│ SIDE │  TAB: 任务大厅 | 账号设置         │
│ BAR  ├──────────────────────────────────┤
│      │  检索结果滚动列表(勾选+尺码)      │
│      ├──────────────────────────────────┤
│      │  底部日志区(实时输出)             │
└──────┴──────────────────────────────────┘

GUI 层的设计原则:

  • 按钮事件只收参数,不写逻辑start_search() 只负责读输入框 → 禁按钮 → 启线程。
  • **UI 更新统一走 self.after(0, callback)**。后台线程拿到数据后,不直接操作控件,而是投递回调到主线程。
  • 配置读写与 UI 绑定。启动时 load_config() 回填所有输入框,保存时 save_config() 从输入框读值写 JSON。

📌 3.2 抓包模块 —— auto_catcher.py(约92行)

这是降低用户使用门槛的 关键模块。基于 mitmproxy 的 Python API 编写,以 addon(插件) 形式注册到 mitmdump。

核心逻辑

classSupremeCatcher:
defresponse(self, flow: http.HTTPFlow):
# 1. 域名过滤:只拦截 supreme-api.supremecherry.cn
if TARGET_DOMAIN notin flow.request.pretty_url:
return

# 2. Token 提取:兼容 token 和 Authorization 两种头
        req_token = (flow.request.headers.get("token"""or
                     flow.request.headers.get("Authorization"""))

# 3. OpenID 提取:递归搜索 JSON 响应体
        open_id = self.find_openid(data)

递归查找 OpenID 的设计价值

deffind_openid(self, obj):
if isinstance(obj, dict):
for k, v in obj.items():
if k.lower() == "openid":   # 大小写不敏感
return v
elif isinstance(v, (dict, list)):
                res = self.find_openid(v)  # 递归深入
if res: return res
elif isinstance(obj, list):
for item in obj:
            res = self.find_openid(item)
if res: return res
returnNone

为什么要递归?

openId 在接口响应中的位置不固定——可能在 data.openId,可能在 result.user.openId,也可能嵌套在 data.list[0].userInfo.openId

如果写死路径,接口结构一调整,整个抓包就失效。

递归方案虽然暴力,但抓住了本质:字段语义比字段位置更稳定。只要字段名还叫 openId(或 openid),不管层级多深都能捕获。

增量保存策略

# 初始化时先读已有配置,避免重复抓取
if os.path.exists("config.json"):
    data = json.load(f)
    self.token = data.get("token")
    self.open_id = data.get("openId")

# 只有新值 ≠ 旧值时才写入
if self.token and self.open_id and is_updated:
    self.save_to_file()

不是每次拦截都写文件,而是 值变化时才触发写入,减少不必要的 IO。


📌 3.3 一键代理启动器 —— login.bat(约25行)

这是整个项目里 代码最少但用户体验影响最大 的文件。

:: 1. 打开 Windows 系统代理
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
    /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
    /v ProxyServer /d "127.0.0.1:8080" /f

:: 2. 启动 mitmdump(静默模式)
mitmdump -s auto_catcher.py -q

:: 3. 退出后恢复代理(关键!)
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
    /v ProxyEnable /t REG_DWORD /d 0 /f

三行 reg add 命令解决了一个朴素但致命的问题:小白用户用完抓包工具后,电脑上不了网

它的本质是 环境生命周期管理

  • 启动前:设置代理环境
  • 运行中:mitmdump 占据前台,用户操作微信小程序
  • 退出后:自动恢复代理设置

工程原则:谁打开的,谁关上;谁修改的,谁恢复。 这个 bat 文件只有 25 行,但它体现的产品化意识,比很多几千行的脚本更有价值。


4. 系统架构与数据流转

                          ┌─────────────────────┐
                          │   login.bat          │
                          │   ① 开系统代理        │
                          │   ② 启动 mitmdump     │
                          │   ③ 退出后关代理      │
                          └──────────┬──────────┘
                                     │
                          ┌──────────▼──────────┐
                          │   auto_catcher.py    │
                          │   mitmproxy 插件      │
                          │   Token + OpenID ────► config.json
                          └─────────────────────┘

┌─────────────────────────────────────────────────────────┐
│                    main.py (主程序)                       │
│                                                         │
│  ┌──────────────┐    ┌──────────────────┐               │
│  │  SupremeBotApp│    │   SupremeAPI     │               │
│  │  (GUI 界面)   │───►│   (业务逻辑)      │               │
│  │              │    │                  │               │
│  │  商品检索 ◄──┼────┤ search_products  │               │
│  │  尺码选择    │    │ fetch_sizes      │               │
│  │  任务队列    │    │ checkout         │               │
│  │  日志输出 ◄──┼────┤ fetch_pay        │               │
│  └──────────────┘    └───────┬──────────┘               │
│                              │                          │
└──────────────────────────────┼──────────────────────────┘
                               │
                    ┌──────────▼──────────┐
                    │  外部依赖             │
                    │  • Supreme API 服务器  │
                    │  • 代理IP提取API       │
                    │  • 本地支付服务:4041   │
                    └─────────────────────┘

数据流向总结

  1. config.json 是整个系统的 数据源——token、openId、地址、代理链接全部从此读取
  2. SupremeBotApp 是 数据消费者——从配置文件读到界面,从界面收集用户选择
  3. SupremeAPI 是 数据执行者——接收参数,发请求,返回结果
  4. 支付参数最终 不经过 GUI,直接推送到本地 4041 服务,生成手机端支付链接

5. 核心技术难点与解决方案

难点一:参数自动化获取——从"手把手教用户抓包"到"一键启动"

问题:token 和 openId 是整个链路的地基。手动抓包(Charles/Fiddler → 找请求 → 复制Header → 粘贴)对普通用户是劝退级门槛。

方案auto_catcher.py + login.bat 组合拳。用户只需双击 bat → 微信打开小程序随便点 → 参数自动写入 config.json。

关键细节

  • Token 同时兼容 token 和 Authorization 两种请求头命名
  • OpenID 递归搜索,不依赖固定 JSON 路径
  • 增量保存,值不变不写文件
  • 代理用后自动恢复,不留副作用

难点二:商品/sku/尺码/库存的四层映射

问题:商品列表接口只返回标题和 spuCode。下单需要的 skuCode、尺码名称、库存数量要跨三个接口才能拼完整。

数据流

商品列表接口 (productsByNavigation)
  │
  ├── spuCode ──► 商品详情接口 (product/info/{spuCode})
  │                 │
  │                 ├── attributes[originCode=BrandColor] → 颜色
  │                 └── skus[].options[originCode] → skuCode ↔ 尺码名
  │
  └── spuCode ──► 库存接口 (product/spu/inventory)
                    └── skuList[].availableCount → 库存数量

兼容处理:尺码字段名做多值匹配 ['customSize', 'Size', 'size'],避免因接口字段命名不一致导致的取值为空。

难点三:GraphQL 订单参数的结构完整性

问题orderCreate 是 GraphQL mutation,参数结构复杂且嵌套深。服务端对金额字段做了 schema 级非空校验——即使值为 0,缺字段也会直接被拒绝。

方案:不依赖"服务端默认值"的假设,所有金额字段显式传入:

amount, productAmount, freight, discount,
coupon, giftCard, tax, additionalServiceFee

8 个字段,值可以为 0,但 字段本身必须存在

难点四:支付接口的 JA3 指纹检测

问题:支付环节的 GraphQL pay 接口对 TLS 握手特征做了校验。Python requests 库的默认 TLS 指纹会被识别为非浏览器请求,导致支付参数拉取失败。

方案:支付请求切换到 curl_cffi,通过 impersonate="chrome110" 模拟 Chrome 110 的 TLS 握手特征。普通请求(检索、下单)仍走 requests,只在必要环节引入对抗手段。

原则按需升级对抗,不滥用。 每个接口能跑通的方案就是最简方案。

难点五:桌面应用的线程安全

问题:Tkinter / CustomTkinter 的 GUI 控件 不是线程安全的。如果在子线程中直接调用 log_box.insert() 或 label.configure(),会触发不可预期的异常甚至 segfault。

方案:所有跨线程 UI 操作通过 self.after(0, callback) 投递回主线程:

# 子线程调用 log()
deflog(self, msg):
defappend():
        self.log_box.insert("end", formatted_msg)  # 主线程执行
    self.after(0, append)  # 投递到 Tkinter 事件队列

同时,耗时操作(检索、下单)全部放到 threading.Thread(daemon=True),保证 UI 不卡顿。

难点六:代理不是全局开关,是运行时策略

问题:代理需求是动态的——默认不走代理,特定场景才开启。如果把代理写死在每个请求里,代码会又散又乱,切换逻辑难以维护。

方案SupremeAPI 内部维护 self.proxy_dict 作为运行时策略:

# 切换代理:一个方法调用
self.api.set_proxy(proxy_url)   # 从 API 提取 → 解析 → 赋值
self.api.set_proxy(None)        # 关闭代理

# 所有请求统一使用 self.proxy_dict
requests.get(url, proxies=self.proxy_dict)

代理从散落在各处的临时代码,变成了 一个可切换的状态位。后期如果要扩展代理池、失败自动切换、按任务分配代理,都可以在这个基础上改,不需要动每一个请求方法。


6. 后期可复用的工程经验

这个项目最有价值的不是某个具体接口的调用方式——接口随时会变。真正能带到下一个项目里去的,是以下几类 工程能力

6.1 配置化——工具交付的分水岭

原则:把所有硬编码变成可读写的外部配置。

配置项
存储位置
读写方式
token / openId
config.json
启动自动加载 + 抓包自动写入 + 界面手动编辑
收货地址
config.json
界面填写 → 一键保存 → 下次启动自动回填
代理提取链接
config.json
界面输入 → 自动保存 → 每次检索/抢购前读取
商品关键词
界面输入框
运行时输入,不持久化(每次抢购场景不同)
抢购时间
界面输入框
运行时输入,定时任务使用

核心思想:**把"改代码"降级为"改参数"**。这是工具能不能交付给非开发者使用的分水岭。

6.2 日志可视化——自动化工具不能是黑盒

没有日志的自动化工具,用户看到的只有两个状态:**"没反应"和"报错了"**。

这套系统的日志输出遵循以下规范:

  • 时间戳:每条日志带 [HH:MM:SS],方便回溯
  • 状态标识:用 emoji 标记事件类型(📦 下单 / ✅ 成功 / ❌ 失败 / 💸 支付 / 🎉 完成 / ⚠️ 警告)
  • 关键数据:订单号、商品名、代理IP、支付链接全部打印
  • 线程安全:日志更新统一走 self.after(0)

6.3 接口兼容层——给不稳定数据加"缓冲"

场景
兼容策略
Token 字段名不一致
同时检查 token 和 Authorization 两个 Header
OpenID 层级不固定
递归遍历 JSON,大小写不敏感匹配 openid
尺码字段名不统一
多值匹配 ['customSize', 'Size', 'size']
代理返回格式校验
检查是否含 : 且不含 {,避免将错误信息当IP使用

这些兼容处理看起来不起眼,但自动化系统能不能 长期稳定运行,差距就在这里。

6.4 环境生命周期管理——有借有还

login.bat 的代理自动恢复逻辑是一个 可复用的模式

开始 → 设置环境 → 执行主逻辑 → 恢复环境 → 结束

不管主逻辑是正常退出还是异常中断,恢复动作必须执行。后期凡是涉及环境变更的操作(改 hosts、装证书、改注册表),都应该遵循这个模式。

6.5 跨端协作——把合适的事交给合适的终端

电脑端擅长:自动化请求、批量处理、精确计时。 手机端擅长:微信支付、扫码认证、生物识别。

这套系统的支付链路设计——电脑下单、参数推送到本地服务、手机微信打开链接付款——没有试图在电脑端强行完成一切,而是承认了移动端的不可替代性。

这本身就是一个重要的工程判断:自动化不是替代一切,而是在合适的边界上停下来。


7. 最终产出:从脚本到系统的能力清单

能力维度
脚本级实现
本系统实现
参数获取
手动抓包 → 粘贴到代码
bat 一键启动 → 自动捕获 → 自动写入配置
商品检索
硬编码 spuCode
多关键词输入 → 自动匹配 → 拉详情+库存
尺码选择
硬编码 skuCode
界面下拉框,实时展示库存
多商品
改代码重新跑
勾选即可,任务队列自动遍历
定时抢购
手动掐秒
输入时间,Timer 准时触发
代理
代码里写死
界面开关,动态提取,按需应用
支付
订单创建即结束
拉支付参数 → 推送本地服务 → 生成链接
日志
print() 刷屏
带时间戳、emoji 标识、线程安全的日志区
配置
改代码
界面填写,一键保存,启动自动加载

8. 总结

这套 Supreme 抢购终端,表面上看是一个"下单工具"。

但从工程角度审视,它已经具备了一个 小型桌面自动化系统 的全部要素:

  • GUI 层:CustomTkinter 现代化界面,线程安全
  • 业务层:多商品队列、定时调度、任务编排
  • 能力层:API 请求、代理策略、抓包引擎
  • 桥接层:支付参数转发、跨端协作

它最值得学习的地方,从来不是某个 GraphQL 接口怎么调、某个 Header 怎么拼——

而是 把一个只有开发者能跑的脚本,包装成普通用户双击就能用的系统,中间每一步的设计决策。

别迷信脚本的速度,要重视系统的确定性。

抢购只是场景,架构才是真正可复用的东西。


文中涉及的接口地址、参数结构均为技术分析用途。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-27 20:18:31 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/666062.html
  2. 运行时间 : 0.090219s [ 吞吐率:11.08req/s ] 内存消耗:4,819.36kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=8551618b8c9940ec730159795714716e
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000559s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000791s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000376s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000263s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000498s ]
  6. SELECT * FROM `set` [ RunTime:0.000214s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000491s ]
  8. SELECT * FROM `article` WHERE `id` = 666062 LIMIT 1 [ RunTime:0.000753s ]
  9. UPDATE `article` SET `lasttime` = 1779884311 WHERE `id` = 666062 [ RunTime:0.000961s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000216s ]
  11. SELECT * FROM `article` WHERE `id` < 666062 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000416s ]
  12. SELECT * FROM `article` WHERE `id` > 666062 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000397s ]
  13. SELECT * FROM `article` WHERE `id` < 666062 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001195s ]
  14. SELECT * FROM `article` WHERE `id` < 666062 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000770s ]
  15. SELECT * FROM `article` WHERE `id` < 666062 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001571s ]
0.091989s