FreeProxyPool:开箱即用的免费代理 IP 池系统 —— 自动采集 · 三层验证 · API 分发
做爬虫开发和数据采集的同学都懂:没有可用的 HTTP 代理,采集任务走到一半就被目标站封 IP;买付费代理池,成本又蹭蹭往上涨。免费代理能用吗?能,但公开渠道采到的免费代理一半以上是死的,直接拿来做请求,带宽和时间都浪费在重试上。
今天给大家介绍一个开源项目——FreeProxyPool,它把"采集 → 验证 → 分发"这条链路做成了开箱即用的完整系统,专治免费代理的各类疑难杂症。

一、项目名片
| 项目信息 | 内容 |
|---|---|
| 项目名称 | FreeProxyPool —— 轻量、可分布式扩容的免费代理 IP 池系统 |
| GitHub 仓库 | https://github.com/chinayury/FreeProxyPool |
| 当前版本 | v0.1.1 |
| 技术栈 | Python 3.12 · FastAPI · Redis · aiohttp · Docker Compose |
| 开源许可证 | AGPL-3.0-or-later(GNU Affero 通用公共许可证 v3) |
| 开发者 | 智维ITMSKY(官网:http://www.itmsky.com) |
二、它解决什么问题
免费代理的公开来源普遍存在三个老问题,FreeProxyPool 针对每一点都做了闭环处理:
| 老问题 | FreeProxyPool 的处理 |
|---|---|
| 采到的代理一半是死的,浪费调用方带宽 | 三层递进验证(TCP → 代理功能 → 多轮复检)+ 客户端失效回报接口 |
| 坏源一直拖慢每一轮采集 | 单源熔断(连续失败计数进冷却)+ "解析出 0 条即判失败" |
| 调用方发现代理失效只能干等下一轮复检 | POST /report/ 立即淘汰并拉黑,不用等 |
三、五大核心特色
1. 38 个采集源,声明式接入
内置 38 个采集源(30 个默认启用),采用声明式注册:想新增一个源,只需在 fetcher/sources/ 目录放一个 .py 文件,注册表自动扫描发现,不用改任何其他代码。每个源带单源熔断(连续失败达阈值进入冷却,冷却结束自动复位)和指数退避重试(1s → 2s → 4s,上限 8s),坏源不会拖垮整轮采集。
2. 三层递进验证,只留真正能用的代理
这是整个系统最核心的设计。每一个候选代理都要闯三关:
- 第一层 TCP 连通探测:毫秒级握手,不通直接拉黑;
- 第二层 代理功能验证:经代理请求目标,记录延迟、出口 IP、匿名度,并探测 CONNECT 隧道能力;SOCKS4 / SOCKS5 按协议分流建立会话;
- 第三层 多轮复检 ×N:连续 N 轮全部通过才判定有效(轮数可配),杜绝"碰巧能用一次"的假活代理。
还有一个贴心的细节——校验目标看护:探测目标站点自己宕机 ≠ 代理失效,此时校验失败不惩罚代理(不退避、不清 streak、不淘汰),目标恢复后自动重验,避免大规模误伤。

3. 失效回报闭环:调用方"举手"立即淘汰
调用方(爬虫、SDK)在使用中发现某个代理失效,调一下 POST /report/,服务端立即剔除并拉黑该代理,不需要等下一轮复检。官方 SDK(同步 requests / 异步 aiohttp 双客户端)内置了自动回报失效代理的能力,还附带 Scrapy 下载中间件范例,代理失效即回报。
4. Redis 存储设计:O(1) 统计 + 地域索引
- Hash 存代理元数据、ZSet 做五类索引(评分 / HTTPS / 过期 / 黑名单 / 地域)、List 做待验队列;
HLEN + ZCARD实现 O(1) 池统计,不再每次请求全量扫描;- 地域索引支持
?area=CN直接在指定地域内取候选,索引不可用时自动退回全量扫描; - 待验队列带长度上限 + 背压裁剪,验证服务长时间停摆也不会撑爆内存。
5. 标准化 API + 安全与运维全家桶
- 三种分发策略:延迟优先 / 随机 / 轮询;
- 延迟分层 tier:
fast / medium / slow / unknown,可按档筛选、可统计分布; - 传输协议筛选:
protocol=http|socks4|socks5; - 批量分发、精简统计、Prometheus 指标(
/metrics)、六类内置告警(日志 + Redis 事件 + Webhook 推送,带冷却去重); - 安全设计硬核:API Key 恒定时长比较、Redis 故障时 fail-closed(限流不放开、鉴权不放开)、采集 URL 协议白名单 + 内网黑名单双重校验(防 SSRF)、后台登录锁定 + CSRF 防护;
- 单代理诊断 CLI:
python -m freeproxypool check 1.2.3.4:8080,一次输出 TCP / HTTP / HTTPS 分层延迟、出口 IP、匿名度、国家码与最终判定。
四、系统架构:四进程职责分离,可分布式扩容
系统拆分为 collector / validator / gateway / scheduler 四个进程,职责严格分离、互不重复触发,全部可以独立扩缩容(scheduler 除外——它是单例,多副本会重复执行定时任务):

- collector(采集层,可多副本):扫描采集源 → 过滤内网/保留地址 → 三层去重 → 推入待验队列;
- validator(验证层,可多副本):消费队列 → 三层验证 → 写入有效池;
- gateway(网关层,推荐 2~4 副本):API 分发 + 管理后台 + 指标;
- scheduler(调度层,单副本):存量复检 / 数据清理 / 统计告警。
Docker Compose 一键编排 6 个容器(redis / collector / validator / gateway / scheduler / nginx),Nginx 做统一入口、限流与静态资源反代,MySQL 仅作可选冷存储归档(默认关闭)。
五、真实运行数据(v0.1.1 实测)
以下数据来自作者部署在测试服务器上的实例(实测于 2026-11-14,v0.1.1):
- 上一轮采集:80,903 条候选代理进入验证队列;
- 三层验证后有效池留存:142 个高质量代理(其中延迟分层 fast 30 / medium 86 / slow 26);
- 支持 HTTPS 目标的代理:66 个;
- 覆盖 27 个国家/地区(US、CN、DE、JP、SG、HK 等);
- 协议分布:HTTP 94 / SOCKS5 41 / SOCKS4 7;
- 黑名单累计淘汰:31,769 个失效代理——淘汰机制的"工作量"可见一斑。

六、五分钟上手
# 1. 准备配置(必填项未设置时 compose 会直接报错,这是刻意设计)
cp .env.example .env
python -c "import secrets;print('API_KEY =', secrets.token_urlsafe(32))"
python -c "import secrets;print('ADMIN_PASSWORD = Fp#'+secrets.token_urlsafe(14))"
# 把上面两行结果填进 .env
# 2. 启动(六个容器一键拉起)
docker compose up -d --build
# 3. 打开管理后台
# http://localhost:5020/admin
不用 Docker 也可以 pip install -e . 后分别运行 python -m freeproxypool collector / validator / gateway / scheduler,或用 python -m freeproxypool all 单进程跑全部(适合本地调试)。
七、API 使用示例
开启 API_KEY 后,携带请求头 API-KEY: <key> 即可调用:
KEY="你的密钥"
# 取一个代理:只要最快的 SOCKS5
curl -H "API-KEY: $KEY" "http://localhost:5020/get/?tier=fast&protocol=socks5&strategy=latency"
# 批量取 20 个中等延迟代理
curl -H "API-KEY: $KEY" "http://localhost:5020/batch/?n=20&tier=medium"
# 全量导出(一行一个 ip:port,方便喂给脚本)
curl -H "API-KEY: $KEY" "http://localhost:5020/all/?format=text"
# 客户端发现代理失效 → 回报,服务端立即剔除并拉黑
curl -X POST -H "API-KEY: $KEY" -H "Content-Type: application/json" \
-d '{"proxies":["1.2.3.4:8080","5.6.7.8:3128"]}' \
"http://localhost:5020/report/"
交互式 API 文档开箱即有(FastAPI 自动生成):http://localhost:5020/docs

八、适用场景与合规说明
FreeProxyPool 的定位是个人学习与自有爬虫测试,适合:
- 数据采集 / 爬虫开发需要低成本代理资源;
- 自有服务的接口测试、压测演练场景;
- 学习分布式系统设计(四进程 + Redis 多结构存储 + 异步高并发校验)。
项目以 AGPL-3.0-or-later 开源:若将本系统作为网络服务对外提供(含修改版),须按许可证第 13 条向服务使用者提供对应源码。同时请遵守采集礼仪——尊重 robots 协议、控制请求频率、禁止对源站压测。
结语
如果你也在为"免费代理不可用"而头疼,不妨给 FreeProxyPool 一个机会:五分钟 Docker 部署,38 个采集源自动补货,三层验证保证质量,标准 API 直接喂给你的爬虫。
GitHub 仓库:https://github.com/chinayury/FreeProxyPool (觉得不错的话,欢迎点个 Star ⭐)
如需二次开发或有项目定制需求,欢迎联系站长。
开发者:智维ITMSKY · 官网:http://www.itmsky.com · 许可证:AGPL-3.0-or-later