已有订阅却无法更新时,先保留当前服务器列表,再核对链接、账户状态、网络请求与返回内容,最后只触发一次更新并记录结果。本文适用于已经从你的服务商处获取订阅的用户,帮助区分“请求没完成”“响应不是订阅”和“列表中没有可用条目”,避免通过反复删除、重建配置扩大问题。
一、先区分更新失败、列表为空与连接失败
Shadowrocket(小火箭)的订阅更新,是根据保存的地址请求服务器条目,再把可识别的内容显示在 Home。更新成功不等于其中每个服务器都能连接;服务器连接失败,也不能反过来证明订阅链接失效。排查时应先确定故障发生在哪一步,而不是同时修改订阅、规则与服务器参数。
在 Home 先展开对应订阅分组,检查是否只是分组收起;如果正在使用搜索或筛选,先清除条件。记录更新前的条目数量,以及更新后是保留旧条目、出现空列表,还是只有连接测试失败。三种现象的处理方向不同。
| 可见现象 | 优先核对 | 暂不改动 |
|---|---|---|
| 更新报错,旧条目仍在 | 地址、网络可达性、服务端响应 | 已有服务器参数 |
| 分组展开后没有条目 | 账户权益、响应内容、输出格式 | Config 中的分流规则 |
| 条目存在,但连接失败 | 服务器状态、认证参数、TLS 设置 | 已确认正常的订阅地址 |
二、核对完整链接:不要只看域名是否正确
订阅链接从你的服务商处获取。应使用其提供的订阅复制入口,而不是复制账户管理页、登录页或账单页的网址。下面是用于解释结构的假值,不是可用订阅;真实链接的路径、参数名称与长度可能不同,不能按示例自行拼接。
https://example.com/sub?token=xxxx
- 核对开头与结尾:确认协议、域名、路径和完整查询参数都被复制。聊天软件的折行显示不一定改变内容,但手动选取文字时可能漏掉最后一段。
- 去掉附带文字:不要把“订阅地址:”、包裹用的引号、句末标点或换行一起写入 URL 字段。也不要删除链接内部原有的符号。
- 保留参数原貌:
?后面通常是查询参数,&用于分隔参数;把它们替换成中文符号会改变地址。不要擅自改写大小写,也不要重复解码百分号编码。 - 重新复制一次:在 Home 进入对应 Subscribe 条目的编辑界面,核对 URL。需要重新添加时可从 Home 的添加入口进入 Add Server,选择 Subscribe,再填写链接;先保留旧条目,避免丢失仍可工作的服务器。
某些网页源码会用 & 表示分隔符 &。如果直接从源码复制,可能把表示方式一起带入地址。优先使用服务商页面的复制按钮,不要对已经正确复制的链接再执行一次全局替换。
三、服务商侧自查:账户有效不等于响应一定有条目
应用购买与服务商账户是两套独立关系。客户端买断 ≠ 线路套餐;在 App Store 恢复 Shadowrocket 购买,不会自动恢复服务商账户权益,也不会替换失效的订阅链接。确认链接完整后,再检查你已有账户的有效期、可用流量、订阅地址是否重置,以及是否存在服务商明确说明的请求限制。
这些是 HTTP 状态码,不是 Shadowrocket 保证逐字显示的弹窗文案。只有在应用提供的错误信息或服务商确认的响应中看到相应状态时,才按该分支处理;不能仅凭列表为空就推断账户已到期。
HTTP 401 Unauthorized
原因:请求未通过服务端认证,可能是 token 已失效或链接被重置。
解法:从你的服务商处获取当前有效链接,完整替换保存的 URL 后再更新。
HTTP 403 Forbidden
原因:服务端拒绝本次访问,可能涉及账户权限或访问条件,不能只归因于密码错误。
解法:让服务商核对该订阅请求的拒绝原因,并按其说明处理账户或访问限制。
HTTP 429 Too Many Requests
原因:请求触发服务端频率限制,继续刷新可能仍被拒绝。
解法:停止手动更新;若响应提供 Retry-After,按其指示等待,否则向服务商确认恢复条件。
结论:先处理已确认的服务端拒绝
如果已确认响应为 401、403 或 429,先修复对应的认证、权限或频率问题,不要通过重写 Config 或反复添加同一链接来尝试消除它。
四、返回成功但节点为空:检查内容,不只检查状态码
HTTP 200 只说明服务端返回了成功响应,不保证内容就是 Shadowrocket 能解析的订阅。登录页面、验证页面、到期说明也可能以 200 返回。此时域名可以访问,甚至页面能正常打开,但响应里没有可导入的服务器条目。
- 返回网页:如果服务商确认返回内容是 HTML 登录页或验证页,应修正订阅入口或服务端访问条件,而不是把页面地址继续当作 Subscribe 使用。
- 返回空正文:请服务商核对账户当前是否实际分配了条目,以及订阅生成端是否正常。清空本地规则不会让空正文生成服务器。
- 输出格式不匹配:使用服务商明确标注适用于 Shadowrocket 的订阅入口。Base64 只是编码方式,不代表编码后的任何内容都能成为有效订阅。
- 条目内容不完整:服务商需要核对协议字段与序列化结果。不要把一段错误页文字手动改成服务器参数,也不要为缺失的 Address、Port 或认证字段猜测值。
Home 中的 Subscribe 用于管理订阅服务器;Config 中的配置文件还可能涉及规则与其他设置。不要把配置文件地址、规则列表地址和服务器订阅地址互相替代。若服务商同时提供多个入口,应先确认每个入口的用途,再选取对应类型。
| 已核实的返回结果 | 含义 | 下一步 |
|---|---|---|
| 200 与 HTML 页面 | 请求成功,但内容不是服务器订阅 | 核对订阅入口和重定向结果 |
| 200 与空正文 | 没有可供解析的正文 | 由服务商检查生成结果 |
| 200 与非空订阅内容 | 仍需核对格式和条目字段 | 提供脱敏错误信息,请服务商核对输出 |
五、网络与更新时机:每次只改变一个条件
更新需要先完成域名解析、连接以及 HTTPS 的 TLS 校验,之后才进入订阅解析。请求超时与解析失败不是同一层故障。切换网络后旧连接可能尚未恢复,账户刚续期时服务端也可能尚未完成状态更新;应以实际请求结果和服务商说明为准,不设一个通用的“等待几分钟就一定恢复”结论。
- 保存基线:记录当前网络是 Wi-Fi 还是蜂窝网络、VPN 是否连接,以及 Home → Global Routing 当前选项。不要同时改动这些条件。
- 完成一次更新:在 Home 对目标 Subscribe 条目执行更新,等待此次请求结束。不要连续点击或同时在多台设备上重复请求同一链接。
- 换网络复测:如果是超时,在设备网络稳定后,用另一种可用网络复测一次。一个网络失败、另一个成功,说明应优先核对网络路径,而不是立刻重置 token。
- 隔离旧连接影响:若怀疑当前连接影响请求,可在理解会中断现有连接的前提下暂时断开 VPN 再测。若 VPN 自动恢复,核对 Settings → On Demand;测试完成后恢复原有设置。
- 核对系统时间:设备日期时间明显错误时可能影响证书有效期判断。先校正时间,不要通过关闭证书校验来处理订阅请求错误。
Global Routing 下的 Config、Proxy、Direct、Scene 是流量处理姿态,不是订阅格式选择器。更新请求实际采用的路径还要结合应用设置与当前连接状态判断,不能仅凭模式名称认定请求必然走某条路径。修改 DOMAIN-SUFFIX、GEOIP、IP-CIDR 或 FINAL,也不能修复服务端返回的空正文。
六、提交排查信息与恢复后的验收
前面的检查仍不能定位时,把可复核的信息提交给你自己的服务商。描述应围绕“何时、在哪种网络、执行什么操作、得到什么结果”,而不是只写“节点没了”。不需要公开账户密码或完整订阅 URL,也不应通过转发原始链接让陌生人代测。
- 发生时间:记录日期、时间和时区,便于服务商查找对应请求。
- 操作与现象:说明是在 Home 更新已有 Subscribe,还是新建后首次更新;更新前后分别有无条目。
- 错误原文:按实际显示抄录或截取错误,区分超时、证书错误、HTTP 状态与解析错误;遮挡认证参数和账户标识。
- 对照结果:说明 Wi-Fi 与蜂窝网络是否一致、是否停用过当前连接,以及账户页面显示的有效状态。
- 服务端核对项:请服务商确认请求是否到达、最终响应状态、是否重定向、正文是否为空,以及输出是否适用于 Shadowrocket。
恢复后先更新一次并展开分组,确认服务器条目已经显示,再用一个现有条目测试连接。若列表恢复但连接仍失败,应转入服务器连接排查,不再重复修改订阅。对于 Trojan 或其他使用 TLS 的条目,应按服务商给出的参数核对 Address、Port 与相关 TLS 字段,而不是根据常见端口自行填值。
结论:以“能更新”和“能连接”分别验收
先确认一次订阅更新能稳定生成条目,再确认所选服务器能建立连接;完成后恢复为排查临时改动的 On Demand 与路由设置,避免把测试状态长期保留下来。