2026-07-22 · 故障排查 · 约 8 分钟

Shadowrocket 订阅解析失败或列表为空:链接格式、服务商侧与更新时机自查

订阅添加后节点列表为空或提示解析失败时,按链接格式、服务商侧状态、更新时机三步逐项排查,并说明每一步该看哪里。

本文速览

Shadowrocket(小火箭)订阅列表为空时,先确认保存的是完整订阅地址,再确认服务商返回的是可解析的订阅内容,最后核对更新是否实际完成。本文以用户已有自己的服务商与订阅为前提,区分地址错误、请求失败、内容异常和显示问题;排查时保留原有条目,每次只改变一个条件,避免把订阅获取失败与连接失败混为一谈。

先分清失败阶段

订阅更新涉及三个环节:读取保存的地址、向该地址发起请求、把响应内容解析为条目。列表为空只能说明目前没有看到可用条目,不能直接证明协议不受支持,也不能据此判断所有连接参数失效。首先观察 Home 中是否保留了订阅分组、是否还有旧条目,以及更新时显示了什么提示。

3 个环节
地址读取 → 请求响应 → 内容解析
2 类导入
Home 中的 Subscribe 与 Config 中的配置文件
1 次变更
每轮只改一个条件,再记录更新结果

结论:先核对响应,再改连接参数

若订阅尚未生成条目,先检查地址、请求结果和返回格式。此时修改单个条目的端口、密码或协议,不能修复订阅服务器返回登录页或空内容的问题。

如果旧条目仍在,但更新失败,应保留现有订阅,先记录失败提示;如果条目已经出现,只是连接不成功,则应进入连接参数与网络路径排查。两种现象的检查对象不同,不宜通过反复删除、重新添加订阅来代替判断。

核对完整订阅地址

从自己的服务商账户页复制专用于 Shadowrocket 的订阅地址。账户首页地址、帮助页面地址和订阅地址可能属于同一域名,但返回内容不同。地址以 https:// 开头并不代表它一定是订阅;真正需要核对的是路径、查询参数与服务商标明的用途。

https://example.com/sub?token=xxxx

上方仅为结构示例,不能用于导入。example.com 是示例域名,xxxx 是假值。实际地址中的 token 常用于鉴权,应按服务商提供的完整值保留;参数名称也可能不同,不要把示例里的名称或内容替换进自己的地址。

  1. 复制完整地址

    在自己的服务商账户页使用复制订阅地址的功能,避免从聊天预览或截图抄写。检查开头和末尾是否带有空格、换行、中文标点或说明文字。

  2. 检查导入类型

    进入 Home → 右上角「+」→ Type → Subscribe。这里添加的是订阅地址;Config 用于配置文件,不应把两类入口互换。

  3. 核对 URL

    在 URL 中粘贴完整地址,检查 ?、&、= 与参数值是否保留。若地址含百分号编码,应使用原始复制结果,不要手动解码或改写。

  4. 保存并更新

    保存后回到 Home,触发该订阅的更新并等待结果。可使用 Home 的下拉刷新;具体更新入口以当前应用内显示为准。记录提示及条目变化,不连续重复提交。

特别注意从网页源码或富文本中复制的地址:参数分隔符可能被写成字面上的 &,而真实 URL 中通常应为 &。不要只凭外观猜测;重新使用服务商账户页的复制功能,再与应用里保存的地址逐字符比较更可靠。

核对服务商响应

地址正确仍可能请求失败。登录自己的服务商账户页,确认订阅权限、有效期和地址是否被重置。如果服务商刚刚重新生成订阅地址,旧地址可能已经失效;应用里保留的旧值不会自动变成新值,应按账户页当前提供的地址重新核对。

下面的英文是 HTTP 状态原文,用于识别服务端响应,不表示 Shadowrocket 必定显示相同文案。只有在实际提示、响应记录或服务商反馈中看到对应状态时,才按该项处理;无法取得状态时,不应凭“列表为空”猜测具体状态码。

报错:401 Unauthorized

原因与解法:请求没有通过该接口的鉴权,可能是参数缺失或凭据失效。重新复制自己的有效订阅地址,核对鉴权参数,并向服务商确认订阅权限。

报错:403 Forbidden

原因与解法:服务器拒绝了这次访问,具体原因取决于服务端访问策略。记录发生时间与所用网络,由服务商核对限制条件,不通过修改协议参数来处理。

报错:404 Not Found

原因与解法:服务器没有找到请求路径对应的资源。检查地址是否被截断、路径是否已改变,再从服务商账户页重新复制完整地址。

报错:429 Too Many Requests

原因与解法:服务器对请求进行了频率限制。停止连续刷新;若响应包含 Retry-After,按其要求等待,否则向服务商确认允许的更新间隔。

HTTP 请求成功也不等于解析成功。例如服务器返回 200 OK,正文却是登录页、账户提示页或维护页面,应用仍然无法把它当作订阅条目。应请服务商确认订阅接口实际返回的内容类型,不要把“浏览器能打开页面”当作订阅可用的充分证据。

区分格式与空内容

订阅内容的封装格式与条目使用的协议是两个层次。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 是协议名称,不能据此直接推断一个订阅响应一定可导入。即使应用支持相应协议,响应仍需采用应用可识别的订阅格式,并包含有效条目。

实际观察 优先核对 下一步操作
响应是 HTML 登录页 是否误复制账户页面地址,或被重定向到登录页 重新取得专用订阅地址,向服务商确认接口无需浏览器登录状态
响应正文为空 账户是否有可返回的条目,接口是否异常 请服务商核对该账户的订阅内容,保留原有条目
正文存在但无法解析 导出格式、编码与内容完整性 确认选择了适用于 Shadowrocket 的输出格式
更新后只出现部分条目 服务端返回数量及应用内筛选条件 清除搜索条件、展开分组,再核对服务商预期返回内容

不要对订阅正文进行盲目的重复编码或解码,也不要把其中看似无用的换行、分隔符全部删除。此类操作可能改变原始格式,使原本的服务端问题变成新的解析问题。排查时优先重新获取未经编辑的订阅地址,再由服务商核对原始响应。

规则文件也不等于节点订阅。DOMAIN-SUFFIX、GEOIP、IP-CIDR、FINAL 用于规则匹配与策略选择;包含这些关键字的配置内容,不意味着它会在 Home 的 Subscribe 分组中生成连接条目。遇到格式混淆时,先确认服务商提供的是订阅还是配置文件。

核对更新时机

服务商修改账户权限、重置地址或调整订阅内容后,应用需要再次请求才可能取得新结果。保存订阅地址、开始更新和完成解析是不同动作,应以实际完成提示及条目变化为依据。列表没有变化也不一定是失败:服务端可能仍返回相同内容。

连接姿态也应记录。Home → Global Routing 中的 Proxy、Direct、Config、Scene 与路由选择有关;Settings → On Demand 与按条件建立连接有关,均不是订阅内容解析器。On Demand 可能影响测试期间的连接状态,应观察实际状态后再比较结果,不要把它误当作订阅定时更新开关。

结论:用相同地址做单变量复核

同一订阅在一个网络能更新、另一个网络失败时,先核对失败网络到订阅域名的访问路径;两个网络都能取得响应但都无法解析时,优先让服务商核对输出内容与格式。

列表为空的显示核对

如果更新没有出现明确错误,但 Home 看不到条目,先排除显示范围问题,再判断是否真的返回了空列表。检查搜索框是否有输入、订阅分组是否折叠,以及正在查看的是否为刚刚更新的分组。多个订阅使用相近名称时,容易把一个分组的更新结果与另一个分组的列表混淆。

  1. 清空 Home 中的搜索条件,展开目标订阅分组,确认没有只查看名称匹配结果。
  2. 核对目标分组保存的地址是否为刚才复制的地址;检查时不要把敏感参数截图公开。
  3. 记录更新前后条目数量及具体提示。若未显示更新时间,不要把设备当前时间当作应用报告的更新完成时间。
  4. 向服务商确认该账户本次应返回哪些条目;服务端返回为空时,本地刷新不会凭空补充内容。

条目已经出现但某个条目连接失败,应另外核对协议、服务器地址、端口及鉴权信息。订阅请求使用的 HTTPS 端口通常是 443,但地址也可以显式指定其他端口;该端口与订阅内每个服务器的连接端口没有必然对应关系,不要将所有条目统一改成 443。

反馈前保留证据

完成上述检查仍无法定位时,将问题整理为一份可复核记录。反馈的目标是让服务商确认请求是否到达、鉴权是否通过,以及当时返回了什么内容,而不是仅发送一句“无法使用”。准确的时间、现象与复现步骤能减少重复询问,也能避免把连接问题误判为订阅问题。

Shadowrocket 是 Apple 平台的闭源商业应用,以 iPhone/iPad 使用为主,唯一获取入口是 App Store。系统要求与购买适用性以 App Store 页面标注为准。需要核对应用来源时,检查开发者 Shadow Launch Technology Limited、官方应用图标与应用 ID 932747118,再继续处理订阅问题。

App Store 正版核对