Skip to content

fix(plugin): detect anti-crawler challenge in non-2xx responses - #2579

Merged
Predidit merged 2 commits into
Predidit:mainfrom
jzy834894319:fix/anticrawler-bad-response-clean
Sep 30, 2026
Merged

Predidit merged 2 commits into
Predidit:mainfrom
jzy834894319:fix/anticrawler-bad-response-clean

Conversation

@jzy834894319

@jzy834894319 jzy834894319 commented Sep 22, 2026 •

Copy link
Copy Markdown

描述

为了更好的适配 Hanime 网站的特性,我尝试了修复 XPath 规则在启用 antiCrawlerConfig 时,无法处理非 2xx Challenge 响应的问题
_目前当目标站点返回 HTTP 403 / 429 / 503 等验证页时,Dio 会先将响应转换成 NetworkExceptionType.badResponse,导致响应正文没有机会进入 XPath 的 captcha 检测逻辑,因此不会触发现有的 WebView 验证流程。

这个修改会在 XPath 搜索请求失败且错误类型为 badResponse 时,继续检查 Dio 中保留下来的响应内容。如果响应头存在 cf-mitigated: challenge,或者响应正文能够被当前规则配置的 anti-crawler 检测器识别,就将该错误转换为 CaptchaRequiredException,从而继续使用现有验证码流程。

API 搜索模式不会走这套转换逻辑,普通非 Challenge 的 HTTP 错误仍保持原有行为。

同时补充了对应测试,覆盖:
XPath 非 2xx Challenge 响应触发验证码流程
cf-mitigated: challenge 响应头识别
普通非 Challenge badResponse 保持原错误
API 模式不会错误进入 captcha 流程_

关联的 Issues

#2578

PR 类型

  • Bug 修复
  • 添加新功能
  • 重构实现
  • 文档或格式
  • 其它

AI 辅助开发

  • 没有使用 AI 辅助
  • AI 辅助开发了部分功能,但是我已检查并理解 AI 所写的代码
  • 基本上都由 AI 实现,但是我非常了解 AI 的代码与写完的产物

AI 辅助模型: OpenAI GPT-5.6 Sol

提交前检查

  • 我已经填写了 PR 模板中的所有内容
  • 我已经阅读了贡献指引,并遵守指引进行开发
  • 这个 PR 的功能已经经过我的测试,并且我完全理解我(或 AI)做出的改动

附注

已通过:

  • flutter test
  • flutter analyze --no-fatal-infos --fatal-warnings

并已在 Windows 构建中进行验证。

@Predidit

Copy link
Copy Markdown
Owner

确定在这个PR后我们可以访问hanime1吗,看上去需要更多的工作

@jzy834894319

jzy834894319 commented Sep 22, 2026 •

Copy link
Copy Markdown
Author

关于hanime1的访问我已经在PR中测试完毕了,重新制作了选集逻辑,可以顺畅的访问并且通过验证,Hanime1的规则在版本修改好后我会同步发出
image
image

@Predidit

Copy link
Copy Markdown
Owner

Hi,很抱歉之前错过了这个PR

注意到我们现在在检测 cf-mitigated: challenge ,当前实现可以通过 cloudflare challenge 吗

@Predidit
Predidit merged commit 241ec54 into Predidit:main Sep 30, 2026
8 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants