匯入訂閱報錯,先分清失敗發生在哪一步
Clash Verge 匯入訂閱的報錯,依發生階段可分為四類:下載失敗、解析失敗、YAML 校驗失敗、核心載入失敗。四類原因的排查方向完全不同,先定位階段再動手排查,能省下大量時間。
| 報錯階段 | 典型提示 | 大概率原因 |
|---|---|---|
| 下載階段 | 「下載失敗」「取得訂閱內容失敗」 | 連結過期、網路阻斷、鑑權失敗 |
| 解析階段 | 「解析失敗」「不是有效的 YAML」 | 回傳 HTML 頁面、Base64 解碼異常 |
| 校驗階段 | 「YAML 解析錯誤:line 12」 | 縮排錯誤、引號未閉合、中文標點 |
| 載入階段 | 「欄位不相容」「設定載入失敗」 | mihomo 與舊版 Clash 欄位差異 |
定位方法:開啟 Clash Verge 的「訂閱」頁,按一次「更新」,觀察報錯出現的時機。進度條沒跑完就失敗,屬於下載問題;下載完成後立刻報錯,屬於解析或校驗問題;設定能載入但核心啟動失敗,屬於欄位相容問題。下面四節依序展開。
連結可達性:過期、鑑權與網路阻斷
第一步,把訂閱連結完整複製到瀏覽器網址列直接存取。這是最快的一次判斷:
- 回傳以
proxies:開頭的文字:連結正常,問題在客戶端 - 回傳 404 或「連結不存在」:訂閱已失效,去機場後台重新產生
- 回傳登入頁或方案到期提示:帳號狀態異常,先續費或重設訂閱
- 一直轉圈或逾時:本機網路到訂閱伺服器線路不通
瀏覽器能開啟、客戶端卻下載失敗時,用命令列確認。Windows 開啟 PowerShell,macOS 開啟終端機,執行:
curl -v -L "訂閱連結" -o sub.yaml -w "%{http_code}\n"
重點關注兩處輸出:HTTP 狀態碼與回應內文。
| 狀態碼 | 含義 | 處理 |
|---|---|---|
| 200 | 伺服器正常回傳 | 檢查客戶端訂閱設定 |
| 401 / 403 | 鑑權失敗或 UA 被封鎖 | 重新複製連結,自訂 User-Agent |
| 404 | 訂閱已刪除或過期 | 機場後台重新產生 |
| 429 | 請求過於頻繁 | 等待幾分鐘再試 |
| 000 / 逾時 | 連線被重設 | 檢查 DNS、防火牆、代理通道 |
部分機場會校驗 User-Agent,客戶端預設 UA 可能被識別為異常流量。Clash Verge 的訂閱編輯面板可以自訂 User-Agent,填入常用瀏覽器 UA 字串即可繞過。
DNS 污染也會導致訂閱更新失敗。訂閱網域被解析到錯誤位址時,瀏覽器因為走系統代理可能正常,客戶端直連卻逾時。把訂閱網域加入「設定」→「參數設定」→「系統代理」的直連規則,或暫時切換可用節點再更新訂閱。
更新訂閱前,先確認目前至少有一個節點可用。訂閱更新請求預設走代理通道,所有節點失效時請求直連電信業者,失敗率會大幅上升。
回傳內容格式:HTML、Base64 與轉換器 JSON
連結可達,客戶端仍報「解析失敗」,多數是回傳內容不是標準 YAML 訂閱。用瀏覽器開啟連結,看回傳內容的開頭:
- HTML 頁面:機場公告頁、Cloudflare 驗證頁或 404 頁面,表示連結指向了網頁
- Base64 亂碼:部分機場用 Base64 編碼訂閱,屬於正常現象
- JSON 結構:機場啟用了訂閱轉換器,回傳的是轉換結果
- 空白檔案:伺服器回傳空內容,聯絡機場處理
Clash Verge 支援直接匯入 Base64 訂閱,客戶端會自動解碼。但部分機場的 Base64 內容混入換行符或 BOM 頭,會導致解碼失敗。把連結內容貼到任意 Base64 解碼工具,確認解碼結果以 proxies: 開頭即可排除這類問題。
如果機場提供的是訂閱轉換器連結,例如 Subconverter 格式,連結後通常帶轉換參數:
?target=clash&url=原始訂閱連結
不同轉換器的參數名稱不一致,建議直接使用機場後台提供的「Clash 訂閱」專用連結,不要手動拼接參數。
還有一類隱蔽問題:機場把訂閱內容放在 HTTP 回應標頭裡,或啟用了 gzip 壓縮但未宣告 Content-Encoding。這類異常客戶端無法自動處理,只能聯絡機場客服修復。
YAML 語法錯誤:縮排、引號與中文標點
訂閱內容下載成功、格式也識別為 YAML,但解析器讀不懂,問題出在 YAML 語法。機場產生的設定偶爾出錯,手動編輯過設定檔的使用者更容易遇到。常見錯誤:
- 縮排混用空格與 Tab:YAML 只接受空格,Tab 直接報錯
- 冒號後缺少空格:
name: 節點名合法,name:節點名解析失敗 - 引號未閉合:節點名含特殊字元時必須用引號包裹
- 中文標點:全形冒號「:」、全形逗號「,」混入模板,解析器不識別
- URL 中的
#未跳脫:#在 YAML 裡是註解起始符,值裡的#需要引號包裹
mihomo 的報錯會帶行號,例如:
yaml: line 12: mapping values are not allowed in this context
定位方法:開啟 Clash Verge 的「設定」→「參數設定」→「設定目錄」,profiles 資料夾裡是訂閱對應的 yaml 檔案。用文字編輯器跳到報錯行,檢查縮排、冒號與引號。
沒有圖形介面時,用命令列校驗:
python -c "import yaml; yaml.safe_load(open('sub.yaml', encoding='utf-8'))"
輸出 None 表示語法正確;報錯會指出具體行號與原因。手動修復只能暫時解決——機場訂閱下次更新時會整體覆蓋檔案。正確做法是聯絡機場回報,或用訂閱轉換器重新產生一份乾淨的設定。
手動修改訂閱檔案前,先複製一份備份。更新訂閱會覆蓋 profiles 目錄下的對應檔案,沒有備份就只能重新排查。
核心欄位相容性:mihomo 與舊版 Clash 的差異
訂閱能解析、能載入,但核心啟動報錯或部分節點不可用,屬於欄位相容性問題。Clash 核心從 Clash Premium 遷移到 mihomo,兩代核心的欄位並不完全互通。
舊訂閱中常見的過時寫法:
| 舊欄位 | mihomo 中的狀態 | 替代方案 |
|---|---|---|
dns.enable |
已廢棄 | dns 段預設啟用,直接刪除 |
tun.enable |
舊版寫法 | 用完整 tun 段設定 |
experimental.udp-fallback |
已移除 | 改用 sniffer |
proxy-groups 缺少 url |
新版要求必填 | 補上測試位址 |
mihomo 新增的欄位,舊版核心同樣不認,例如 sniffer、profile.store-selected、dns.fake-ip-filter。
判斷方法:查看核心日誌。Clash Verge 的「設定」→「參數設定」→「日誌」裡能看到核心輸出,出現 unknown field 或 unsupported 字樣即為欄位不相容。處理優先序:
- 向機場索取 mihomo 專用訂閱連結,多數機場同時提供 Clash 與 mihomo 兩條連結
- 用訂閱轉換器把舊格式轉為 mihomo 格式
- 在訂閱編輯面板裡手動刪除不相容欄位
刪除欄位時不要動 proxies 段的核心欄位。type、server、port、uuid、alterId 是節點連通性的基礎,刪錯會導致全部節點不可用。
完整自查順序與恢復建議
把上述四類原因串成一條路徑,依序執行,多數問題 5 分鐘內能定位:
- 瀏覽器開啟訂閱連結,確認回傳內容是 YAML 或 Base64
- 用 curl 確認 HTTP 狀態碼,403 或 404 時重新產生連結
- 儲存為本機 yaml,用 Python 或線上工具校驗語法
- 查看核心日誌,確認沒有
unknown field警告 - 在 Clash Verge 刪除舊訂閱,重新匯入新連結
- 啟動核心,存取一個需要代理的網站驗證連通
全部通過仍無法使用時,把訂閱檔案與核心日誌一起發給機場客服,附上 mihomo 版本號,定位效率會高很多。
最後是恢復建議:每次成功匯入訂閱後,在「訂閱」頁複製一份設定檔備份。設定出問題需要回滾時,直接貼上備份內容,比從頭排查快得多。