问题背景与对应修复 PR
在实际自托管部署(v1.5.3 Docker)及源码排查过程中,发现以下三个可独立修复的问题,已按单一职责原则分别提交了 3 个独立的 Pull Request 供按需审阅合并:
1. [Bug] ret=200013 (freq control) 提前 break 导致无法触发降级采集及回调重复执行 (见 PR #470)
- 复现与表现:当前微信公众平台
/cgi-bin/appmsgpublish 与 /cgi-bin/appmsg 接口极易触发风控返回 {"base_resp":{"err_msg":"freq control","ret":200013}}。
- 代码原因:
- 在
core/wx/model/web.py、app.py、api.py 中,遇到 ret == 200013 重试后直接执行了 break 退出 while True 循环,导致下方的 self._fallback_to_free_publish(...) 降级逻辑成为不可达死代码,耗时 3 分钟后以 成功0条 退出。
while True 循环内部的 finally: super().Item_Over(...) 在 continue(重试)或 return(移交子采集器)时也会被触发,导致 Item_Over_CallBack 被重复调用甚至在 Over_CallBack 之后执行。
core/wx/model/free_publish.py 在 4 个后台端点均返回 200013(effective_endpoint is None)时,尚未衔接已有的 MpsWereadMP(weread_mp 微信读书通道)以及 core/wx/base.py 中定义的 _auto_fallback(MpsPlaywright)兜底,且直接 return 时漏掉了 super().Over()。
2. [Privacy / Frontend] 前端模板默认硬编码百度统计 (hm.baidu.com) (见 PR #471)
web_ui/index.html 与 static/index.html 中默认内嵌了 <script src="https://hm.baidu.com/hm.js?975de8724ac02eb7e6d2357bb95c067d"></script>。
- 对于私有化/内网自托管部署用户,这会将私有域名、URL 路径上报至第三方统计平台,同时在启用隐私保护扩展的浏览器中引发
net::ERR_BLOCKED_BY_CLIENT 控制台报错。
3. [Chore / Docker] 仓库根目录残留非运行时测试脚本及 .dockerignore 规则完善 (见 PR #472)
- 仓库根目录下的独立网络/压力测试脚本(
atack.py、dns.py)未被主程序引用,但在 Docker 构建 COPY . /app 时被打入生产镜像,容易触发主机/容器安全扫描告警;建议清理并在 .dockerignore 中排除 scripts/probe_*.py 等本地调试脚本。
问题背景与对应修复 PR
在实际自托管部署(v1.5.3 Docker)及源码排查过程中,发现以下三个可独立修复的问题,已按单一职责原则分别提交了 3 个独立的 Pull Request 供按需审阅合并:
fix(gather): 修复 ret=200013 频率限制提前 break 导致无法触发降级采集及回调重复执行问题)fix(web_ui): 移除前端模板硬编码的百度统计脚本,保护自托管部署隐私并消除控制台拦截报错)chore(docker): 完善 .dockerignore 排除调试脚本并清理仓库根目录非运行时测试脚本)1. [Bug]
ret=200013 (freq control)提前break导致无法触发降级采集及回调重复执行 (见 PR #470)/cgi-bin/appmsgpublish与/cgi-bin/appmsg接口极易触发风控返回{"base_resp":{"err_msg":"freq control","ret":200013}}。core/wx/model/web.py、app.py、api.py中,遇到ret == 200013重试后直接执行了break退出while True循环,导致下方的self._fallback_to_free_publish(...)降级逻辑成为不可达死代码,耗时 3 分钟后以成功0条退出。while True循环内部的finally: super().Item_Over(...)在continue(重试)或return(移交子采集器)时也会被触发,导致Item_Over_CallBack被重复调用甚至在Over_CallBack之后执行。core/wx/model/free_publish.py在 4 个后台端点均返回200013(effective_endpoint is None)时,尚未衔接已有的MpsWereadMP(weread_mp微信读书通道)以及core/wx/base.py中定义的_auto_fallback(MpsPlaywright)兜底,且直接return时漏掉了super().Over()。2. [Privacy / Frontend] 前端模板默认硬编码百度统计 (
hm.baidu.com) (见 PR #471)web_ui/index.html与static/index.html中默认内嵌了<script src="https://hm.baidu.com/hm.js?975de8724ac02eb7e6d2357bb95c067d"></script>。net::ERR_BLOCKED_BY_CLIENT控制台报错。3. [Chore / Docker] 仓库根目录残留非运行时测试脚本及
.dockerignore规则完善 (见 PR #472)atack.py、dns.py)未被主程序引用,但在 Docker 构建COPY . /app时被打入生产镜像,容易触发主机/容器安全扫描告警;建议清理并在.dockerignore中排除scripts/probe_*.py等本地调试脚本。