Skip to content

[Bug] Reddit channel: pinned rdt-cli v0.4.2 (httpx) 被 Reddit WAF 403,上游修复 #20 未合并,doctor 无法发现 / rdt httpx transport gets 403 while urllib works #642

Description

@zhangtiezhuang

摘要 / Summary

Reddit 通道(rdt-cli 后端)在持有有效 reddit_session cookie 的情况下仍被 Reddit 返回 403 Blocked。根因在下游 rdt-cli:其 httpx 传输被 Reddit 按 TLS/HTTP 客户端指纹封禁,而同样的凭据走 urllib / curl / requests 均正常。上游已有修复(rdt-cli PR #20:httpx→requests),但未合并;本项目将 rdt-cli pin 在 v0.4.2(httpx 版),因此集成至今仍是坏的。

复现 / Reproduction(本机实测 2026-08-21)

同一台机器、同一个有效 reddit_session、同一 URL https://www.reddit.com/api/me.json?raw_json=1、同一套 Chrome 指纹 headers:

urllib       → 200 application/json
curl         → 200 application/json
httpx.Client → 403 text/html '<body class=theme-beta>...'     ← rdt-cli 内部用的就是 httpx
rdt status   → authenticated=false, error="Access forbidden: Resource"

与 rdt-cli 上游 Issue #13(aaajiao)的复现过程完全一致——连 403 的 <body class=theme-beta> 响应体都相同。

根因 / Root cause

  1. 上游:rdt-cli 的 httpx TLS/HTTP 栈被 Reddit 指纹识别并封锁,凭据再有效也 403。见 public-clis/rdt-cli#13;修复 PR #20(httpx→requests,urllib3 可通过指纹检查,123 项测试通过)于 2026-08-07 提交,至今未合并(上游 2026-03 已停更)。
  2. 本项目agent_reach/channels/reddit.py 将 rdt-cli pin 到 5e4fb3720d5c174e976cd425ccc3b879d52cac66(= 2026-03-21 v0.4.2,httpx 版),不含 fix(youtube,bilibili): 修复 yt-dlp 渠道 10 个 bug #20 修复

为什么 doctor 发现不了 / Why doctor can't catch it

_check_rdt() 刻意不执行 rdt status(避免触发上游自动刷新浏览器 Cookie),只静态检查 credential.json 是否存在 + 7 天 TTL。因此只要 cookie 文件存在且新鲜,doctor 永远返回 warn、永不 fail——用户会误判为 cookie / 代理问题,实际是 rdt 客户端被 WAF 封。对 VPS / 无头服务器场景(无 OpenCLI 桌面浏览器),Reddit 读取链路实际不可用,但 doctor 不报。

建议 / Suggestions(贴合"胶水层、不改上游源码"定位)

  1. 前移 pin:把 _RDT_GIT_SOURCE 的 commit 从 5e4fb37(httpx 版)前移到含 requests 修复的版本。等待 fix(youtube,bilibili): 修复 yt-dlp 渠道 10 个 bug #20 合并期间,可先用其提交 3ff6db5;合并后用主分支即可。一行改动,不触碰上游源码。
  2. doctor 增加真实可用性探针:对 rdt 通道用 requests 以已存 cookie 直接请求一个只读端点(如 /api/me.json)做一次性验证(不调用 rdt status、不触发上游自动刷新逻辑),把 403 显示为真实 error,而不是永远 warn。
  3. 文档补一行guides/setup-reddit.md 说明 rdt-cli httpx 传输已知被 WAF 封(上游 Instagram cookies 配置后无法使用 - 被重定向到登录页 #13/fix(youtube,bilibili): 修复 yt-dlp 渠道 10 个 bug #20),修复正式合并前可本地应用该补丁;搜索类需求建议走 Exa 兜底(site:reddit.com,见 Reddit health can be ok while search.json still gets 403; search should prefer Exa #222)。

补充 / Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions