本文重點

Shadowrocket(小火箭)的訂閱問題可分成連結、請求、回應內容與列表顯示四個環節檢查。本文以你已有服務商與訂閱為前提,說明如何確認連結是否完整、分辨逾時與解析失敗、檢查 Settings → Subscribe 中的更新方式,以及如何保留現有設定並確認問題是否排除。

先分辨解析失敗與列表為空

更新訂閱時,應先取得資料,再將資料解析為伺服器項目。請求未完成、伺服器回傳登入頁面,或回應內容無法辨識,都可能導致無法取得新項目;列表為空也可能是搜尋篩選條件、訂閱群組收合,或伺服器實際回傳空內容所致。只看最後顯示的列表,無法直接判斷是哪個步驟出錯。

確認連結 取得請求資料 檢查回應 解析項目 查看列表

先返回 Home,清除目前的搜尋條件、展開相應的訂閱群組,再確認是所有項目都不見了,還是只有某個群組沒有項目。記下這次更新時顯示的完整提示與發生時間;如果舊項目仍在,請暫時保留,不要把「更新失敗」當成「舊設定已失效」。

確認訂閱連結:完整網址與驗證參數

前往自己的服務商帳戶頁面,重新複製適用於 Shadowrocket 的訂閱網址,並逐項比對 App 內儲存的網址。帳戶首頁、方案說明頁和單一伺服器分享內容都不是訂閱網址。複製時請確認已選取完整內容,尤其是問號後方的驗證參數。

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

上方是不可用於匯入的示意網址。此處的 https:// 是通訊協定部分,example.com 是網域,/sub 是路徑,?token=xxxx 代表查詢參數。實際網址的路徑與參數名稱由你的服務商決定,不能直接照著範例修改。訂閱網址中的 token 通常與存取權限相關,請妥善保護,視同帳戶憑證。

  1. 檢查網址前後是否多出引號、空格、換行或通訊軟體附加的標點符號。不要刪除 URL 原本有效的編碼字元。
  2. 確認 ?、&、= 等分隔符號都完整。若複製的是網頁原始碼中的文字,請留意參數分隔符號是否被誤存為字面文字 &。
  3. 保留原始 token 的大小寫與編碼格式,不要任意解碼 %2F、替換加號,或重新排列含有簽章的參數。
  4. 如果服務商最近重設了訂閱網址,請重新複製新網址;舊網址即使看起來相似,也可能已遭撤銷。

在瀏覽器開啟網址可作為輔助檢查,但不能據此下定論。瀏覽器可能使用已登入帳戶的 Cookie,App 發出的訂閱請求不一定具有相同的登入狀態;反過來說,瀏覽器顯示一長串編碼文字或觸發儲存內容,也不代表回應有問題。需要確認的是該網址能否獨立回傳 App 支援的訂閱內容。

檢查回應:逾時、驗證失敗與內容不符

能連上網域不代表訂閱介面可用,收到回應也不代表取得有效訂閱。如果 App 提示、診斷記錄或服務商提供的資訊中有 HTTP 狀態碼,請連同發生時間一併記錄。以下列出的是標準 HTTP 狀態碼或網路錯誤字詞,不代表 Shadowrocket 每次都會顯示完全相同的文字。

HTTP 401 Unauthorized

原因:伺服器未接受目前請求的身分驗證憑證,可能與 token 失效或缺少驗證資訊有關。

處理方式:前往自己的帳戶頁面重新複製訂閱網址,並請服務商確認該網址的驗證狀態。

HTTP 403 Forbidden

原因:伺服器拒絕目前的請求,可能與帳戶權限、來源限制或存取政策有關,不能只憑狀態碼就判定是方案到期。

處理方式:確認帳戶狀態,並向服務商提供請求時間與狀態碼,確認是否有存取限制。

HTTP 429 Too Many Requests

原因:伺服器限制了請求頻率,連續重新整理可能讓排查耗時更久。

處理方式:停止重複發送請求,依照伺服器的等待提示或服務商說明稍後再更新一次。

Request timed out

原因:請求未能在等待時間內完成,問題可能出在網路路徑或訂閱伺服器。

處理方式:先比較 Wi-Fi 與行動網路,再確認是否需要透過已可用的代理連線使用 Update via Proxy。

如果回應是帳戶登入頁面、維護通知或存取驗證頁面,即使 HTTP 狀態為 200,也不代表內容能解析為伺服器列表。請服務商確認提供的網址回傳的是適用於 Shadowrocket 的訂閱格式,而非需要互動操作的網頁。不要將錯誤頁面中的文字當成伺服器參數手動填入。

結論:先確認收到的內容,再調整解析相關設定

如果回傳的不是訂閱資料,反覆匯入同一個網址也無法解決問題。先請自己的服務商確認回應內容與授權狀態,再重新更新一次。

檢查 Settings → Subscribe 與更新路徑

在 Settings → Subscribe 中檢查訂閱更新相關設定,尤其是 Update via Proxy。此設定會影響更新請求所走的路徑,但無法修正網址,也不會將不支援的回應內容轉換為有效訂閱。排查時一次只變更一個條件,並記下更新結果。

2 個層級
設定路徑:Settings → Subscribe
2 種路徑
比較更新請求:直接連線與 Update via Proxy
1 個設定
每次只變更一個條件,再手動更新
  1. 先保留目前設定並更新一次:在 Home 更新訂閱,例如下拉重新整理,留意是否出現錯誤提示,不要連續觸發多次請求。
  2. 直接連線逾時時,再考慮改走代理:如果已有可用伺服器,先選取並建立連線,再前往 Settings → Subscribe 檢查並啟用 Update via Proxy,然後重新更新。
  3. 確認代理確實可用:使用 Home 中的 Connectivity Test 輔助判斷。測試有結果,只能說明在該測試條件下的連線狀況,不代表一定能連上訂閱介面。
  4. 代理路徑失敗時,反向比較:如果目前網路允許直接連線至訂閱介面,請關閉 Update via Proxy 後再試一次。不要同時修改 DNS、Global Routing 和訂閱網址。

如果列表已空,沒有任何可用的既有伺服器,只啟用 Update via Proxy 並不能建立可用連線。此時應先檢查直接連線的路徑,或向自己的服務商確認訂閱介面的存取條件。取得訂閱與連線至伺服器是兩個環節;尚未取得後者所需的設定時,無法只靠一個開關略過前者。

選擇更新時機,避免把舊結果誤認為新問題

服務商剛恢復帳戶權限、重設 token 或調整訂閱內容後,應先確認變更已生效,再手動更新。不要假設所有訂閱都有相同的更新間隔,也不要把讓 App 停留在前景等待當成更新已完成。自動更新行為請以 Settings → Subscribe 中目前的實際設定為準。

更新時機與確認方式
目前情況先做什麼接著確認什麼
帳戶狀態剛恢復確認服務商帳戶頁面顯示的權限已生效手動更新後是否出現預期項目
訂閱網址剛重設將 App 儲存的網址替換為新網址是否仍在請求舊 token 對應的網址
網路剛從 Wi-Fi 切換至行動網路等目前的網路連線穩定相同網址在新網路下是否仍然逾時
收到 HTTP 429停止連續重新整理,依提示等待下一次請求是否仍受限制
服務商確認訂閱內容已調整手動更新一次相應群組的項目與參數是否同步變更

更新失敗時,舊項目可能仍然顯示,因此「列表裡還有伺服器」不代表剛才更新成功;同樣地,項目名稱沒有變化,也不代表沒有更新,伺服器端可能只修改了連線參數。請綜合更新提示、實際項目與服務商確認的變更來判斷,不要只看名稱。

常見問題與排查資訊整理

同一個網址在瀏覽器能開啟,為什麼 App 解析失敗?

先查看瀏覽器顯示的具體內容。如果是登入頁面或帳戶管理頁,就無法證明已取得訂閱資料;即使顯示訂閱文字,也應向自己的服務商確認格式適用於 Shadowrocket。不要直接將瀏覽器中的整頁內容貼到伺服器欄位。

啟用 Update via Proxy 後反而無法更新,該怎麼辦?

先確認選取的既有伺服器能否建立連線,並在 Home 執行 Connectivity Test。如果代理路徑無法使用,但訂閱介面可以直接連線,請前往 Settings → Subscribe 關閉 Update via Proxy,只更新一次,並記錄兩次結果的差異。

列表為空,要先刪除 App 再重新匯入嗎?

先清除 Home 的搜尋條件並展開群組,再確認訂閱網址與服務商帳戶狀態。重新安裝會增加還原原有設定的工作量,也無法改變伺服器回傳的內容;保留舊設定更方便比較問題發生前後的差異。

訂閱更新成功,為什麼 Connectivity Test 仍然逾時?

成功取得訂閱只代表已取得並解析設定,不表示每台伺服器都能連線。確認 Home 中選取的是預期的伺服器,再向自己的服務商確認位址、連接埠與協定所需參數。不要因連線測試失敗就擅自修改訂閱 token。

需要服務商進一步排查時,請提供足以定位問題的資訊,同時保護訂閱憑證。公開討論時不要貼出完整訂閱網址、QR Code 或含 token 的截圖;只有在確有必要時,才透過自己的服務商指定的私人支援管道提交完整網址。

完成以上檢查後,處理方向應該很明確:網址錯誤就修正網址,權限問題請服務商確認,網路逾時則檢查更新路徑,格式問題則確認回應內容。原因未明時不要同時修改多項設定,否則無論成功或失敗都難以判斷原因。