当前位置:首页>python>Python + 比兔代理数据采集实战:socks5h 网关模式 20 行代理层、50 页真实采集与可视化全流程

Python + 比兔代理数据采集实战:socks5h 网关模式 20 行代理层、50 页真实采集与可视化全流程

  • 2026-08-19 04:33:53
Python + 比兔代理数据采集实战:socks5h 网关模式 20 行代理层、50 页真实采集与可视化全流程

90% 的代理教程都在教你自建 IP 池,但如果你用的是「网关模式」的住宅代理,那 300 行池化代码有一半是白写的。这篇文章用一个真实采集任务,把两种模式跑通给你看,顺便讲一个被全网忽略的协议坑——socks5 和 socks5h 差一个字母,结果天差地别。

一、为什么你的数据采集任务总被封

做数据采集的开发者,几乎都经历过这个循环:

在这里插入图片描述

我前段时间接了个活:监控某跨境电商平台 500 个商品的价格变化,每小时跑一次。第一版用 requests 直连,跑了不到半天,家里的宽带 IP 就被目标网站拉黑了,连带我自己用浏览器都打不开那个站。

在这里插入图片描述

海外平台对自动化采集的防御非常严格,解决方案只有一个:代理 IP。但代理 IP 怎么选、怎么接、怎么用,里面的坑比你想的深得多。我翻了网上 17 篇同类教程(CSDN、掘金、知乎、腾讯云),发现一个普遍问题:几乎所有人都在教同一套方案,而这套方案在很多时候是多余的。这篇文章就来拆这个局。

二、90% 教程的通病:自建池的重复劳动

网上代理 IP 教程的标准套路是这样的:

在这里插入图片描述

这套方案对不对?对。有没有用?有。但有没有必要?未必。

关键问题在于:你用的是哪种代理服务?

代理服务有两种完全不同的接入模式,而大多数教程根本没区分:

维度
API 提取模式
账密网关模式
你拿到什么
IP:端口
 列表
Host / Port / User / Pass 四元组
谁负责 IP 轮换
你自己写代码管服务端自动做
单个 IP 失效
你要检测、剔除、补充
服务端自动换,你无感
代理层代码量
~300 行
~20 行

大多数教程,无一例外在讲 API 提取模式 + 自建池。但如果你用的是账密网关模式(比如本文要实测的 比兔代理 ),IP 轮换在服务端完成,你在客户端再写一套池化逻辑,就是重复劳动

三、避坑实录:代理连不通的分层诊断

这一章是我踩坑最多、也最有价值的一章。网上 17 篇教程,没有一篇讲过 curl 52 在代理场景意味着什么,也没人教你怎么用「故意输错密码」三秒切分故障类型。

3.1 第一版诊断:错误的结论

我注册了比兔代理,拿到了 2GB 免费流量,在用户中心生成代理凭据。第一版测试用官网给的 curl 命令:

在这里插入图片描述

curl -x us.dyn.bitudaili.com:10000 -U "USER952156-zone-custom:your_password" IP查询接口

结果:curl: (52) Empty reply from server

我做了分层诊断:

层级
检测手段
结果
DNS
dig us.dyn.bitudaili.com
✅ 正常解析至 66.93.173.5
TCP
nc -zv host 10000
✅ 端口连通
HTTP 请求
curl -v
✅ 请求已发出
HTTP 响应
❌ Empty reply(断点在这)

然后我做了一个「错误密码对照实验」:

密码
结果
正确密码 your_password
Empty reply(退出码 52)
故意错误 WRONGPASS
Empty reply(退出码 52)完全相同

HTTP 代理协议规定,认证失败必须返回 407 Proxy Authentication Required。正确密码和错误密码返回完全一致,说明服务端根本没校验凭据,拦截发生在认证之前。

再加上官方认证页面写着「不支持部分网络环境」,我下了一个结论:服务端基于来源 IP 归属地做准入拦截,该网络无法使用。

这个结论是错的。

3.2 翻转:协议选错才是真凶

后来重新审视,我发现所有测试都只用了 http:// 协议。于是补测了 SOCKS5:

协议前缀
DNS 解析位置
结果
http://
❌ Empty reply(退出码 52)
socks5://
客户端本地
❌ Empty reply(退出码 52)
socks5h://代理服务器远程
✅ HTTP 200!

只差一个字母 h,结果天差地别。

3.3 为什么差一个字母就这么大区别

socks5:// 表示由客户端本地解析目标域名 DNS。某些网络环境下 DNS 解析可能异常,目标域名被解析到错误 IP,代理去连一个不存在的地址,自然失败。

socks5h:// 中的 h = hostname,表示把目标域名原样传给代理服务器,由代理服务器端做 DNS 解析。这样既避免了本地 DNS 异常,SOCKS5 协议握手又是二进制的,兼容性更好。

三种协议测试结果对比:http vs socks5 vs socks5h

如上图所示,同一个代理网关、同一套凭据、同一个端口,只改协议前缀:
  • http:// 失败(curl 52,HTTP CONNECT 方法在特定网络环境下兼容性差)

  • socks5:// 失败(本地 DNS 解析异常,解析到错误 IP)

  • socks5h:// 成功(DNS 在代理服务器端解析,避免本地异常)

下面是真实终端运行的输出录制(代理凭据已脱敏):

终端实测:协议对比 + IP轮换 + 采集

这次实测的出口 IP 为乌克兰 134.249.8.13(ISP: Kyivstar UA,真实家庭宽带),连续 8 次请求出现 8 个不同国家的独立 IP,网关自动轮换完全生效。采集环节第 2 页因连接抖动失败(3 次重试后放弃),其余 4 页成功。

3.4 修正后的排障口诀

连不上先换协议,别急着换密码
  http://  不行 → 试 socks5h://
  socks5:// 不行 → 改 socks5h://(h = 远程DNS)
  socks5h:// 也不行 → 再查密码和白名单

错误密码返回 407 → 凭据问题
错误密码和对密码返回相同错误 → 准入/网络问题,改配置无效

这个"故意输错密码"的好处就在于,一次操作,就能在三秒钟帮你把问题分成两类:要么是配置有问题(去改配置),要么是网络有问题(去换网络)。

四、网关模式 vs 自建池:本质区别在哪

API 提取模式(自建池的温床):

在这里插入图片描述

账密网关模式(本文主角):

在这里插入图片描述

比兔官方原话:「轮换会话生成的代理列表信息相同,但其对应的代理IP是不同的」。即 10 条代理的 Host/Port/User/Pass 完全一样,但每次请求出口 IP 不同。

场景
用什么
服务商提供网关 + 轮换会话
网关模式
,不需要自建池
服务商只给 IP 列表
自建池
需要固定 IP 做长期会话
网关 + session 参数
免费代理拼凑
自建池

先搞清楚服务商提供哪种模式,再决定要不要写池。

五、网关模式实战:40 行代码搞定采集

5.1 准备工作

注册比兔代理,完成个人实名认证,获得 2GB 免费流量。在用户中心:

在这里插入图片描述

生成后得到四元组:Host / Port / User / Pass

5.2 参数字典(从用户中心「接口参数说明」提取)

比兔的用户名支持参数化拼接,语法如下:

[account]-zone-[zone]
[account]-zone-[zone]-region-[国家码]
[account]-zone-[zone]-region-[国家码]-session-[8位整数]
[account]-zone-[zone]-region-[国家码]-session-[8位整数]-sessTime-[分钟]
参数
含义
约束
zone
IP 池类型
如 custom
region
国家码
如 us / gb / de
session
固定出口 IP 标识
必须 8 位整数
sessTime
会话保持时长
1-180 分钟
,必须与 session 同用

在这里插入图片描述

5.3 核心代码:代理层只有这么多

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

HOST = "us.dyn.bitudaili.com"
PORT = "10000"
USER = "USER952156-zone-custom"# 实际使用时替换为你的
PASS = "your_password"

# 关键:特定网络环境下必须用 socks5h://,不能用 http://
# h = hostname,DNS 在代理服务器端解析,避免本地 DNS 异常
proxy = f"socks5h://{USER}:{PASS}@{HOST}:{PORT}"

session = requests.Session()
session.proxies = {"http": proxy, "https": proxy}

# 传输层重试:网关偶尔会断连,重试 3 次即可
retry = Retry(total=3, backoff_factor=1.5,
              status_forcelist=[429500502503504],
              allowed_methods=frozenset(["GET""HEAD"]))
adapter = HTTPAdapter(max_retries=retry, pool_connections=20, pool_maxsize=20)
session.mount("http://", adapter)
session.mount("https://", adapter)

# 就这些。没有 ProxyPool,没有健康检查,没有评分调度。
# 后面直接 session.get(url) 就能采集。

代理层代码量:约 20 行。对比自建池的 300 行(第七章展示),这就是网关模式的价值。

5.4 实测采集结果

用上面的代码采集某图书采集练习站,跑了50 页大规模实测

出口IP: 83.37.39.0  ES/Vigo  ISP=Telefonica de Espana SAU

第 1页  OK  200  50KB  累计 1页
第10页  OK  200  49KB  累计10页
第50页  OK  200  49KB  累计50页

成功页数: 50/50    总流量: 2.43 MB    耗时: 78秒

50 页全部成功,0 失败,消耗 2.43 MB 流量。 出口 IP 为西班牙 Telefonica(真实家庭宽带 ISP)。

流量验证:主账户流量显示精度只到 0.01 GB(约 10MB),小请求量看不出变化。额外下载 16MB 测试包后,主账户从 2.00 GB → 1.98 GB,子账户已用 19.05 MB

用户中心流量消耗:1.98GB / 子账户已用 19.05 MB

大流量下载测试终端日志:累计 16 MB

经验:要验证代理连通性,跑 ≥10MB 下载测试最稳,小请求量看不出流量变化。

5.5 出口 IP 验证:确实是真实住宅 IP

连续 10 次请求的出口 IP 记录:

#
出口 IP
国家
ISP
1
27.73.83.63
越南
Viettel Group
2
103.126.119.51
印尼
PT. Putra Lebak
3
87.181.238.110
德国
Deutsche Telekom
4
158.181.46.66
阿塞拜疆
Aztelekom
5
103.52.69.55
印尼
PT. Sumatera Global
6
45.166.166.148
巴西
K1 Telecom
7
偶发失败
8
110.235.166.50
菲律宾
PLDT
9
79.28.141.116
意大利
INTERBUSINESS
10
103.164.255.18
孟加拉
Maher International
  • 成功率:9/10 = **90%**(带 3 次重试)

  • 独立 IP:9 个(每次请求都不同,网关自动轮换生效)

  • 全部为真实住宅 ISP:Viettel、Deutsche Telekom、PLDT……没有一个是机房 IP

实测出口IP分布:连续10次请求,9个独立真实住宅IP

IP 遍布越南、印尼、德国、巴西、菲律宾、意大利等 9 个国家,ISP 全部是真实家庭宽带运营商,没有机房 IP。网关自动轮换完全生效,客户端无需任何 IP 管理代码。

六、更多采集场景实战

为了验证网关模式的通用性,除了 books,再跑两个不同类型的目标站。

6.1 案例二:名言采集

场景:多语言名言库数据采集,每页 10 条,采集 5 页。技术点:CSS Selector 解析、分页、代理轮换。

import requests
from lxml import etree

session = make_session()  # 第五章的网关 Session,代码不变

all_quotes = []
for page inrange(16):
    url = f"http://名言采集站/page/{page}/"
    r = session.get(url, headers=headers(), timeout=25)
    tree = etree.HTML(r.text)
for it in tree.xpath('//div[@class="quote"]'):
        all_quotes.append({
"quote":  it.xpath('.//span[@class="text"]/text()')[0],
"author": it.xpath('.//small[@class="author"]/text()')[0],
"tags":   it.xpath('.//a[@class="tag"]/text()'),
        })

实测结果:

案例二:名言采集站采集结果

5 页共 50 条名言,每条含「名言文本 / 作者 / 标签」三个字段,已导出 Excel。

6.2 案例三:新闻聚合站热门标题采集

场景:采集某新闻聚合站 Top 30 热门新闻标题。技术点:JSON API 解析、HTTPS 目标站、多请求并发。

该站提供公开 API,返回 JSON 格式。这里采集 Top 30 条新闻的标题、URL、得分、作者:

# 1. 获取 Top 30 故事 ID
r = session.get("https://新闻聚合站API/topstories.json", timeout=30)
story_ids = r.json()[:30]

# 2. 逐条获取详情
stories = []
for i, sid inenumerate(story_ids, 1):
    r = session.get(f"https://新闻聚合站API/item/{sid}.json", timeout=20)
    item = r.json()
    stories.append({
"rank":   i,
"title":  item.get("title"""),
"url":    item.get("url"""),
"score":  item.get("score"0),
"author": item.get("by"""),
    })

实测结果:

案例三:新闻聚合站 Top 30 热门新闻采集

30 条新闻全部采集成功,每条含「排名 / 标题 / URL / 得分 / 作者」。注意这次目标站是 HTTPS,通过 socks5h:// 代理访问 HTTPS 站点完全正常。

6.3 三个案例的统一性

案例
目标站
协议
解析方式
条数
结果
图书采集站
HTTP
XPath
100
✅ 全部成功
名言采集站
HTTP
XPath
50
✅ 全部成功
新闻聚合站
HTTPS
JSON
30
✅ 全部成功

三个案例用的是同一个 make_session() 函数,代理层代码一行没改。无论目标是 HTTP 还是 HTTPS、返回 HTML 还是 JSON、解析用 XPath 还是 r.json(),网关模式都通用。这就是网关模式的价值:代理层与业务层完全解耦。

七、会话控制:session 与 sessTime 参数详解

6.1 什么时候需要固定 IP

轮换 IP 适合大规模采集公开数据。但有些场景需要同一 IP 保持一段时间:

  • 登录后采集:Cookie 绑定 IP,换了 IP 就掉登录

  • 分页连续采集:某些站点会校验分页请求是否来自同一 IP

  • 模拟真实用户行为:一个"用户"不会每秒换一个 IP

这时候就要用 session 参数。

6.2 参数拼接示例

# 基础(轮换 IP)
USER952156-zone-custom

# 指定美国
USER952156-zone-custom-region-us

# 固定出口 IP(8 位整数)
USER952156-zone-custom-region-us-session-12345678

# 固定 IP 且保持 20 分钟
USER952156-zone-custom-region-us-session-12345678-sessTime-20

6.3 参数校验的坑:sessTime=0

我在写参数拼接代码时,单元测试抓出一个真实 bug:

# 错误写法
if sess_time:          # sessTime=0 时,0 是 falsy,被跳过
    validate(sess_time)

# 正确写法
if sess_time isnotNone:  # 显式判断 None,0 会被正确拦截
    validate(sess_time)

sessTime=0 是非法值(必须 1-180),但 0 在 Python 中是 falsy,用真值判断会让它被静默跳过,拼出错误的用户名。这是 Python 参数校验的典型陷阱——遇到「0 是合法类型但非法取值」时,真值判断会漏掉它

单元测试 12 项用例,修复后全部通过:

[PASS] 基础(默认池)          USER952156-zone-custom
[PASS] 指定美国               USER952156-zone-custom-region-us
[PASS] 固定出口IP             ...-session-12345678
[PASS] 固定IP保持20分钟        ...-session-12345678-sessTime-20
[PASS] session 只有3位        已拦截: session 必须是 8 位整数
[PASS] sessTime 为0           已拦截: sessTime 需在 1-180 分钟
...
结果:12 通过 / 0 失败

单元测试终端输出:12项全部通过

注意最后一项 sessTime 为0 的测试——这就是那个被 falsy 值跳过的 bug。修复后(is not None 代替真值判断)被正确拦截。12 项用例全部通过。

6.4 实测发现:region 参数在某些套餐下不生效

用户名
结果
USER952156-zone-custom
✅ 90% 成功率
USER952156-zone-custom-region-us
❌ 全部失败

zone-custom 可能是「全球混播」资源池,不支持进一步按 region 切分。如需指定国家,可能需要更换 zone 类型。这是一个没写在文档里的坑,实测才发现。

八、传统自建池实现(300 行对照版)

为了让对比公平,我把传统的 API 提取 + 自建池方案也实现了一遍。核心逻辑参考了网上高赞文章的 ProxyPool 设计。

7.1 自建池要做什么

1. 调用 API 拉取 IP 列表
2. 多线程健康检查(每个 IP 测连通性、延迟)
3. 维护状态:success_count / failure_count / score / cooldown_until
4. 调度策略:轮询 / 随机 / 加权
5. 失败分类处理:407(认证) / 429(限流) / Timeout(超时) 分别不同处理
6. 定时补充新 IP
7. 日志记录

7.2 核心数据模型

@dataclass
classProxyNode:
    url: str
    scheme: str = "http"
    success_count: int = 0
    failure_count: int = 0
    last_error: str | None = None
    last_latency_ms: float | None = None
    cooldown_until: float = 0
    score: float = 1.0

    @property
defavailable(self) -> bool:
return time() >= self.cooldown_until

7.3 调度器

classProxyPool:
defpick(self) -> ProxyNode | None:
        candidates = [p for p in self.proxies if p.available and p.score > 0]
ifnot candidates:
returnNone
        weights = [max(p.score, 0.1for p in candidates]
return random.choices(candidates, weights=weights, k=1)[0]

defreport_success(self, proxy, latency_ms):
        proxy.success_count += 1
        proxy.score = min(proxy.score + 0.110.0)

defreport_failure(self, proxy, reason):
# 不同错误不同处理
if reason == "HTTP_407":      # 认证失败,直接淘汰
            proxy.score = 0
            proxy.cooldown_until = time() + 3600
elif reason == "HTTP_429":   # 限流,冷却 2 分钟
            proxy.cooldown_until = time() + 120
elif reason == "ConnectTimeout":
            proxy.cooldown_until = time() + 30
# ...

7.4 失败重试(骨架)

自建池的失败重试要按错误类型分类处理:407 认证失败直接淘汰、429 限流冷却 2 分钟、Timeout 冷却 30 秒。完整实现含日志、健康检查线程、API 拉取、状态持久化等,约 300 行

代理层代码量对比:网关模式20行 vs 自建池300行

20 行 vs 300 行,这不是炫技,是工程取舍。网关模式把 IP 轮换、健康检查、失效补充这些复杂性全交给了服务端,你只需要关心业务逻辑。

九、压测对比:谁在裸泳

8.1 测试设计

同一个目标站(图书采集练习站),同样的采集任务(5 页 × 20 条 = 100 条),两种模式各跑 10 轮,统计成功率、平均延迟、代码行数。

8.2 对比结果

指标
网关模式
自建池
代理层代码行数
~20 行
~300 行
成功率
90%
85%
平均延迟
850ms
1200ms
独立 IP 数
9 个/10 次
取决于池大小
维护成本
零(服务端管)
高(要管池)
失败处理
自动重试
手动分类处理

网关模式采集延迟分布

上图是网关模式采集 5 页数据的延迟分布。首次连接 3.9 秒(含一次重试),后续稳定在 800-900ms。注意第 1 页的红色柱——那是网关建立新连接的预热成本,之后就进入连接池复用阶段,延迟大幅下降。

8.3 分析

网关模式在成功率(服务端 IP 质量筛选更专业)、延迟(连接池可复用)、代码量、维护成本上全面占优。如果你的服务商提供网关模式 + 轮换会话,没有理由自建池。


十、完整工程链路与可视化

完整的采集链路:代理层(20行)→ 请求重试 → 数据解析 → 异常处理 → 落库存储 → 可视化。代理层代码见第五章,业务层就是标准的 session.get() + etree.HTML() + pandas.to_excel(),不再赘述。

10.1 数据可视化

采集到的数据用 Chart.js 做一个单页 HTML Dashboard,无需后端,双击即可打开:

在这里插入图片描述

数据采集结果可视化 Dashboard

页面包含:

  • 顶部统计卡片:100 条图书 / 50 条名言 / 5 页采集 / 2 个数据源

  • 图书评分分布柱状图(1-5 星各多少本)

  • 图书价格区间分布(£0-20 / £20-30 / ... )

  • 名言作者 Top 8 横向柱状图

  • 数据样例表格(前 10 条)


总结

这次实测用的比兔代理,它的账密网关模式正好能说明本文的问题——服务端自动轮换 IP、支持 HTTP 和 SOCKS5 协议、8000 万+真实住宅 IP 覆盖 195 国,实测 90% 成功率、出口全是真实家庭宽带、50 页 0 失败。新用户注册送 2GB 免费流量且不过期,够你把完整链路跑一遍。如果你正好在选住宅代理服务,可以试试。

这篇文章用一次真实的数据采集任务,讲清了三件事:代理协议要选对——socks5h 的那个 h 在特定网络环境下绕不开;网关模式下自建池是多余的——20 行代理层就够;实测数据不骗人——50 页 0 失败、9 个真实住宅 IP、流量实打实消耗。如果你也在做数据采集,遇到代理连不通、IP 总被封、自建池代码越写越复杂,大概率问题不在你的代码,而在没人告诉你的那一个字母。

最新文章

随机文章

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