本文摘要

已有訂閱卻無法更新時,先保留目前的伺服器清單,再檢查連結、帳戶狀態、網路請求與回應內容,最後只執行一次更新並記錄結果。本文適用於已向服務商取得訂閱的使用者,協助判斷問題是「請求未完成」、「回應內容不是訂閱」,還是「清單中沒有可用項目」,避免反覆刪除或重建設定,讓問題更加複雜。

一、先區分更新失敗、清單為空與連線失敗

Shadowrocket(小火箭)的訂閱更新會根據已儲存的網址向伺服器要求取得項目,再將可辨識的內容顯示在 Home。更新成功不代表每個伺服器都能連線;伺服器連線失敗,也不能據此判定訂閱連結失效。排查時應先確認問題發生在哪個步驟,而非同時修改訂閱、規則與伺服器參數。

讀取訂閱網址 向伺服器送出請求 接收回應 解析項目 顯示伺服器

先在 Home 展開對應的訂閱群組,確認是否只是群組尚未展開;若正在使用搜尋或篩選,請先清除條件。記錄更新前的項目數量,以及更新後是保留舊項目、清單變空,還是只有連線測試失敗。這三種情況的處理方向各不相同。

目前狀況優先檢查暫勿變更
更新出錯,舊項目仍在網址、網路連線狀況、伺服器回應既有伺服器參數
展開群組後沒有項目帳戶權益、回應內容、輸出格式Config 中的分流規則
項目存在,但連線失敗伺服器狀態、驗證參數、TLS 設定已確認正常的訂閱網址

二、檢查完整連結:不只確認網域正確

訂閱連結請向你的服務商取得。請使用服務商提供的訂閱複製入口,不要複製帳戶管理頁、登入頁或帳單頁的網址。以下是假設值,僅用於說明連結結構,並非可用訂閱;實際連結的路徑、參數名稱與長度可能不同,請勿照範例自行拼接。

https://example.com/sub?token=xxxx
  1. 檢查開頭與結尾:確認通訊協定、網域、路徑及完整查詢參數都已複製。聊天軟體換行顯示不一定會改變內容,但手動選取文字時可能漏掉最後一段。
  2. 移除附加文字:不要將「訂閱網址:」、包在外面的引號、句末標點或換行一併填入 URL 欄位,也不要刪除連結本身原有的符號。
  3. 保留參數原貌:? 後方通常是查詢參數,& 用來分隔參數;若改成全形符號,網址就會改變。不要擅自變更大小寫,也不要重複解碼百分比編碼。
  4. 重新複製一次:在 Home 進入對應 Subscribe 項目的編輯畫面,檢查 URL。若需重新新增,請從 Home 的新增入口進入 Add Server,選擇 Subscribe 後填入連結;先保留舊項目,以免遺失仍可使用的伺服器。

部分網頁原始碼會以 & 表示分隔符號 &。若直接從原始碼複製,可能會把這種表示方式一併帶入網址。請優先使用服務商頁面的複製按鈕,不要對已正確複製的連結再次執行全域取代。

三、服務商端自查:帳戶有效不代表回應一定包含項目

應用程式購買與服務商帳戶是兩種互不相同的關係。買斷客戶端 ≠ 線路方案;在 App Store 還原 Shadowrocket 購買項目,不會自動還原服務商帳戶權益,也不會取代已失效的訂閱連結。確認連結完整後,再檢查既有帳戶的有效期限、可用流量、訂閱網址是否已重設,以及服務商是否明確說明請求限制。

401
HTTP 驗證相關回應:先檢查憑證
403
HTTP 拒絕存取:檢查帳戶與存取條件
429
HTTP 請求過多:停止連續重新整理

這些是 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 回傳。這種情況下,網域可能可以連線,甚至頁面也能正常開啟,但回應中沒有可匯入的伺服器項目。

Home 中的 Subscribe 用來管理訂閱伺服器;Config 中的設定檔還可能包含規則及其他設定。設定檔網址、規則清單網址與伺服器訂閱網址不可互相替代。若服務商提供多個入口,請先確認各入口的用途,再選擇對應類型。

已確認的回應結果代表意義下一步
200 與 HTML 頁面請求成功,但內容不是伺服器訂閱檢查訂閱入口與重新導向結果
200 與空白內容沒有可供解析的內容請服務商檢查產生結果
200 與非空白訂閱內容仍須檢查格式與項目欄位提供已遮蔽敏感資訊的錯誤內容,請服務商檢查輸出

五、網路與更新時機:每次只變更一個條件

更新前須完成網域解析、連線與 HTTPS 的 TLS 驗證,之後才會進入訂閱解析。請求逾時與解析失敗屬於不同層級的問題。切換網路後,舊連線可能尚未恢復;帳戶剛續約時,伺服器端也可能尚未更新狀態。請以實際請求結果和服務商說明為準,不要假設「等幾分鐘就一定會恢復」。

  1. 記錄目前狀態:記下目前使用 Wi-Fi 或行動網路、VPN 是否已連線,以及 Home → Global Routing 的目前選項。不要同時變更這些條件。
  2. 完成一次更新:在 Home 對目標 Subscribe 項目執行更新,並等待此次請求完成。不要連續點按,也不要同時在多部裝置上重複請求相同連結。
  3. 切換網路重新測試:若發生逾時,待裝置網路穩定後,改用另一種可用網路測試一次。如果一種網路失敗、另一種成功,應優先檢查網路路徑,而非立即重設 token。
  4. 排除舊連線的影響:若懷疑目前連線影響請求,可先了解這會中斷現有連線,再暫時中斷 VPN 進行測試。若 VPN 自動重新連線,請檢查 Settings → On Demand;測試完成後,恢復原有設定。
  5. 檢查系統時間:裝置日期或時間明顯錯誤時,可能影響憑證有效期限的判斷。請先校正時間,不要以關閉憑證驗證的方式處理訂閱請求錯誤。

Global Routing 中的 Config、Proxy、Direct、Scene 是流量處理模式,不是訂閱格式選擇器。訂閱更新請求實際採用的路徑,還須依應用程式設定與目前連線狀態判斷,不能只憑模式名稱認定請求一定經過某條路徑。修改 DOMAIN-SUFFIX、GEOIP、IP-CIDR 或 FINAL,也無法修復伺服器回傳的空白內容。

六、提交排查資訊與確認恢復狀況

若完成前述檢查仍無法定位問題,請將可供查核的資訊提供給你的服務商。描述時請說明「何時、使用哪種網路、執行什麼操作、得到什麼結果」,不要只寫「節點不見了」。無須公開帳戶密碼或完整訂閱 URL,也不要轉傳原始連結,請陌生人代為測試。

恢復後先更新一次並展開群組,確認伺服器項目已顯示,再用一個既有項目測試連線。若清單已恢復但連線仍失敗,應改為排查伺服器連線,不要再反覆修改訂閱。對於 Trojan 或其他使用 TLS 的項目,請依服務商提供的參數檢查 Address、Port 與相關 TLS 欄位,不要自行猜測常見連接埠的數值。

結論:分別確認「可更新」與「可連線」

先確認訂閱更新能穩定產生項目,再確認所選伺服器能建立連線;完成後請還原排查期間暫時變更的 On Demand 與路由設定,避免長期保留測試狀態。