上次自动同步失败:Fetch is aborted(cc-switch 代理环境)
Quick fix
cc-switch 内部请求(会话刷新、定价同步)不走供应商 env 代理,需在软件里配置出站代理或系统代理;WebView 的 models.dev 同步只认系统代理,修复待发布。
Symptom
Section titled “Symptom”上次自动同步失败:Fetch is aborted这里有两个层面的问题,都来自 cc-switch 内部 HTTP 请求与代理配置的关系。第一,根据维护者在 #2024 中的答复,会话/配额刷新使用 cc-switch 自己的 HTTP 客户端:设置了应用级出站代理时走该代理,否则走系统代理;供应商配置里 env 环境变量中的 proxy 设置对这些内部请求完全不生效,只作用于 CLI 本身的流量。有用户在只配置了 env proxy、未配置软件代理的情况下升级到 v3.13.0 后触发了多次会话刷新并导致封号,正是因为刷新流量没有走他以为的代理。
第二,「使用统计 → 定价 → 自动同步 models.dev 定价」是另一个独立缺陷(#6696):`src/lib/modelsDevPricing.ts` 中的 `fetchModelsDevPricing()` 在 WebView 内用浏览器原生 fetch 直连 `https://models.dev/api.json`,不经过 Rust 后端,因此既不使用 cc-switch 的全局代理客户端,也不读应用内代理配置;WKWebView 只跟随系统代理。在 models.dev 必须经本地代理访问的环境下,请求挂起直到 15 秒 AbortController 超时,被记录为 `Fetch is aborted`。该问题在 v3.20.0 仍存在,issue 保持 open,报告者已准备修复 PR(方向是把 fetch 挪到 Rust 后端 command,复用全局代理客户端),但截至输入信息时尚未合入发布。
区分两类代理:供应商配置里的 env proxy 只作用于 Claude Code / Codex 等 CLI 的请求流量,cc-switch 自身的内部请求(会话刷新、配额刷新)不会使用它,需要单独配置。
如果内部请求需要走代理:在 cc-switch 应用设置中开启并配置软件级「出站代理」,或配置系统代理。应用级出站代理优先,未设置时回退到系统代理。
针对 models.dev 定价同步报「Fetch is aborted」:该请求由 WebView 发出、只跟随系统代理,临时办法是设置系统代理(或 TUN)让 WKWebView 能经代理访问 models.dev;应用内代理对此无效,根治需等待官方把该 fetch 移到 Rust 后端的修复版本发布。
验证:`~/.cc-switch/model-pricing.json` 中的 `lastSyncError` 不再为 `Fetch is aborted`,且 `lastSyncAt` 出现时间戳,说明同步成功。
~/.cc-switch/model-pricing.json(同步成功后应看到 lastSyncAt 有值、lastSyncError 为空) {"lastSyncAt": "<时间戳>","lastSyncError": null}
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 2 个真实 issue
- 会话刷新走的是配置文件环境变量里的 proxy,还是软件里的出站 proxy?
- 根据维护者答复:会话刷新使用 cc-switch 的 HTTP 客户端,设置了应用级出站代理就走该代理,否则走系统代理;供应商 env 里的 proxy 设置不被使用。
- 如果配置文件设置了 env proxy,能否自动填充到软件单独设置的 proxy 处?
- 输入的 issue 中官方未回应该建议;目前两者是相互独立的配置,内部请求只认应用级出站代理或系统代理,需要手动单独设置。
- 我已在 cc-switch 里配置了代理,为什么 models.dev 定价同步还是失败?
- 定价同步在 WebView 内用浏览器原生 fetch 直连 models.dev,不经过 Rust 后端的全局代理客户端,WKWebView 只跟随系统代理,不读应用内代理配置。临时办法是设置系统代理;根治修复(把 fetch 挪到 Rust 后端)截至 v3.20.0 尚未发布。
- 「从 models.dev 导入」定价对话框也失败,是同一个问题吗?
- 是。导入对话框与自动同步共用同一条 fetch 路径,同样不走应用内代理,会报同样的 Fetch is aborted。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。