为什么copymanga-downloader没有15次请求限制?账号池轮转机制深度剖析
【免费下载链接】copymanga-downloader拷贝漫画 copymanga 的多线程下载器,带图形界面 带收藏夹 支持下载下架的漫画 支持导出cbz和pdf,已打包exe 没有每分钟15次API请求的限制 下载速度飞快项目地址: https://gitcode.com/gh_mirrors/cop/copymanga-downloader
copymanga-downloader 是一款针对拷贝漫画(copymanga / mangacopy.com)的多线程漫画下载器,自带图形界面、收藏夹,支持下载下架漫画,还能把章节导出为 CBZ 和 PDF。很多用户好奇:为什么别的工具频繁触发"每分钟 15 次 API 请求"的风控限制,而它下载速度飞快、几乎不踩坑?答案就藏在它的账号池轮转机制里。本文将带你从零看懂这套机制的设计思路 🧐
一、先搞懂:15 次/分钟的限制到底怎么来的
拷贝漫画的接口对单个账号的 token做了频率风控:同一个 token 在短时间内的请求超过阈值(即每分钟 15 次 API 请求)后,接口会直接返回一个特殊的210状态码,而不是正常的200。
- 单账号工具:所有请求共用一个 token,批量下载几百话时,很快就会撞上 210,之后只能干等或者换账号。
- 多账号轮转工具:把请求分散到一批账号上,每个账号的请求频率都被压低,天然绕开了单账号限频。
这也是 copymanga-downloader 能在"章节详情"里一次性勾选大量章节飞速下载的根本原因。
二、账号池轮转:核心机制拆解
整个机制的代码集中在 src-tauri/src/account_pool.rs,可以理解为一个"账号排队系统"。
1. 每个账号自带 60 秒冷却计时器
账号池里的每个账号都记录了一个limited_at(被风控的时间戳)。每次取账号时,程序会检查"当前时间距离该账号上次被风控是否已超过 60 秒",只有冷却结束的账号才会被选中使用(对应 account_pool.rs 中的get_available_account)。
简单说:一个账号被限了,就自动休息 1 分钟,下一轮请求换别的账号上场,请求流永不断档。
2. 账号不够用?自动注册新账号
更巧妙的是,你根本不需要手动准备一堆账号。当账号池里没有处于可用状态的账号时,程序会调用 account_pool.rs 中的注册逻辑:
- 随机生成一个英文姓名 + 数字组成的用户名;
- 随机生成一个密码并自动完成注册、登录,拿到 token;
- 新账号入库,同时持久化保存。
账号列表保存在应用数据目录的account.json中,下次启动直接复用,注册一次、终身轮转。
3. 被风控的账号会被"拉黑"并落盘
当某次请求收到210风控响应时,copy_client.rs 会立刻把该账号的limited_at更新为当前时间,并立即写回account.json。这样即使中途退出程序,下次启动也不会立刻使用一个正在被风控的账号。风控错误本身被单独定义为RiskControlError类型(见 errors.rs),与普通网络错误严格区分。
三、下载流程:遇到风控会"自动等、自动重试"
账号池保证了"总有干净的账号可用",而下载管理器还加了一层保险。在 download_manager.rs 的get_chapter_with_retry中:
- 一般性错误:随机等待 1~5 秒后重试,最多 5 次,避免瞬间打满接口。
- 注册环节也被风控:直接原地等待 60 秒冷却,期间每 1 秒向前端推送一次倒计时事件。
- 倒计时会显示在界面上:前端在 ProgressesPane.vue 监听风控事件后,进度条上会显示"风控中,将在 X 秒后自动重试"——用户无需任何操作,下载会自己续上。
配合可配置的章节并发数(默认 3)和图片并发数(默认 30,见 config.rs),请求在时间上被自然摊平,任何单个账号都很难达到 15 次/分钟的阈值。
四、为什么这套设计比"手动换号"更聪明
| 方案 | 痛点 | 账号池轮转的解法 |
|---|---|---|
| 单账号硬扛 | 几分钟就被 210 风控 | 请求分散到多账号 |
| 手动准备多账号 | 维护成本高、token 会失效 | 自动注册 + 自动登录 + 持久化 |
| 遇到风控就报错 | 用户中断、手动重试 | 冷却 60 秒 + 自动重试 + 界面倒计时 |
| 无节制并发 | 瞬时请求尖峰触发风控 | 信号量限流 + 章节间隔休眠 |
一句话总结:"单账号限速"变成了"账号池限频",限制没有消失,只是被分摊到了足够多的账号上,对用户的体感就是"没有 15 次请求限制"。
总结
copymanga-downloader 的账号池轮转机制由三块拼图组成:
- ⏱️60 秒冷却计时:被风控的账号自动休息,冷却结束再复用;
- 🤖自动注册补池:账号不足时随机生成新账号,注册、登录、入库全自动;
- 🔁重试 + 倒计时:风控时等待并自动重试,进度面板实时显示恢复时间。
如果你也想研究实现细节,重点阅读 src-tauri/src/account_pool.rs(账号池与自动注册)和 src-tauri/src/copy_client.rs(210 风控码的处理)这两个文件即可。需要自己编译的话,克隆仓库后安装 Rust、Node、pnpm,依次执行依赖安装与pnpm tauri build即可构建完成 🚀
【免费下载链接】copymanga-downloader拷贝漫画 copymanga 的多线程下载器,带图形界面 带收藏夹 支持下载下架的漫画 支持导出cbz和pdf,已打包exe 没有每分钟15次API请求的限制 下载速度飞快项目地址: https://gitcode.com/gh_mirrors/cop/copymanga-downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考