Proxy Checker 是一个自托管优先的免费代理检测、筛选、仓库维护工具。你可以把它理解成一个给代理池做体检的小面板:拉取持续更新的公共代理源,批量检测 HTTP、HTTPS、SOCKS4、SOCKS5、SOCKS5H,把真正有用的代理放进“我的仓库”,再生成稳定的 TXT / JSON 链接给脚本、服务或其他工具直接拉取。
如果你经常折腾代理、跑号服务器、API 连通性,v6.2 这一版就很适合放在自己的机器上跑。它不是那种“我在别的机器上测通了,所以你那里也一定能用”的玄学榜单,而是直接回答一个更实用的问题:你这台服务器能不能连上这个代理,并且通过它访问目标服务?
🚀 项目地址:strongshuai/proxy-checker
代理检测不是“全世界统一答案”,它本质上是这条链路是否通:
你的检测服务器 -> 代理 IP -> 目标服务
别人服务器测出有效,只能说明别人那台机器到这个代理、再到目标服务是通的;你的服务器不一定能连上同一个代理。反过来也一样。谁要用代理,谁来测,结果才最有参考价值。
内置 5 种检测模式:
generic:默认常规代理检测。openai:检测 ChatGPT 首页、OpenAI API 域名、Cloudflare 状态。grok:检测 grok.com 和 xAI API。gemini:检测 gemini.google.com 和 Gemini API。claude:检测 claude.ai 和 Anthropic API。API 返回 401 / 403 这类状态时,会被视为“API 域名可达”,因为它说明网络链路能到服务端;这不代表账号、Key 或额度可用。Cloudflare 状态只影响网页访问判断,不拿来误伤 API 可达性。
v6.0 取消了注册页/账号入口检测。原因很简单:能打开注册页,不代表能注册成功。注册是否成功还受风控、手机号、邮箱、浏览器环境、历史行为、地区策略等影响,用一个 HTTP 状态下结论很容易误导。
现在工具只做更诚实也更有用的判断:当前服务器视角下,代理本身是否可用,目标网页/API 是否可达。
内置多个持续更新的代理源,包括 Proxifly、Databay、IPLocate、OpenProxyList/Roosterkid、TheSpeedX、VPSLab、Hookzof、Spys.me、ProxyScrape、GeoNode、My-Proxy,以及保守保留的 ProxyNova、hide.mn、free-proxy-list、CheckerProxy。
前端可以单独拉取某个源,也可以一键拉取所有免费代理源并按代理地址去重。不同时间点数量会波动,聚合规模通常可以到 1W+,最终质量仍以你自己的检测结果为准。
自托管 Python 服务支持真正的后端自动任务,不靠浏览器 setInterval 凑数。浏览器关闭后,服务仍然可以按计划拉取全部免费代理源,合并“我的仓库”里的代理,按设置的轮次、并发和检测模式批量检测,再把符合策略的结果同步到仓库 TXT / JSON 链接。
stable_only、include_unstable、archive_all 三种入库策略。linux.do,上线后建议立即修改。app.js。v6.2,README 和 PRODUCT 同步更新发布说明。/api/repo/save 默认改为安全合并,旧本地记录不会再覆盖云端记录。base_count 校验,发现云端已被自动任务更新会拒绝覆盖并提示先刷新。TXT 和 JSON 两种链接:TXT 适合代理订阅,JSON 保留等级、国家、用途、服务可达等完整信息。prefers-reduced-motion,操作反馈更快。8888,私有部署端口不写入公开项目。v6.1,README 和 PRODUCT 同步更新发布说明。localStorage,减少批量轮询时频繁序列化大 JSON 造成的主线程卡顿。max_concurrent,后端经过限制后同时作用于 asyncio.Semaphore 和 HTTP 客户端连接数。.header 背景和下边框,并增加负向底部间距,让主界面更紧凑。statusText 移到原来 Ctrl+Enter 开始/停止 的位置,不再占用按钮行最右侧空间。8888,不把私有部署端口写入公开项目。generic、openai、grok、gemini、claude 五种检测模式。401 / 403 继续算“API 域名可达”,明确不代表账号、Key 或额度可用。HTTP 200 却不知道代理实际出口的困惑。linux.do,并升级为登录前不下发主界面,避免只删前端浮层就能进入。/api/auto/get、/api/auto/save、/api/auto/run-now、/api/auto/stop、/api/auto/status。index.html 和 app.js 是唯一前端源码。tools/smoke.py 改为无 SSH 密码、可指定 base URL 和登录密码,并覆盖检测模式、登录门禁、设置、日志、自动任务能力。v6.0。8888,私有服务器端口不写入公开代码。git clone https://github.com/strongshuai/proxy-checker.git
cd proxy-checker
pip install -r requirements.txt
python server.py
打开:
http://localhost:8888
首次登录默认密码:
linux.do
最好把 Proxy Checker 部署在你实际跑号、跑业务、调用目标服务的那台服务器上。
代理检测不是一个绝对结果,而是“检测服务器 -> 代理 IP -> 目标服务”这条链路在当前时间点是否可用。其他服务器能检测出有效代理,只能说明那台服务器可以连通这个代理 IP;不代表你的服务器也一定能连通。最终要看你的服务器能不能连上代理 IP,以及这个代理从你的服务器出口访问目标服务时是否正常。
简单说:谁要用代理,谁来测,结果才最有参考价值。
默认配置在 config.json。上线部署建议新建 config.local.json 覆盖私有配置,config.local.json 已加入 .gitignore,不会被提交。
示例:
{
"auth_password": "change-me",
"auth_session_days": 7,
"check_rounds": 2,
"max_check_rounds": 3,
"max_concurrent": 30,
"max_concurrent_limit": 200,
"timeout": 12,
"detect_timeout": 8,
"run_log_limit": 100,
"timezone": "UTC",
"port": 8888,
"log_file": "server.log"
}
配置优先级:
环境变量 > config.local.json > config.json > 程序默认值
可用配置:
| 配置项 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
auth_password | AUTH_PASSWORD | linux.do | 登录密码,留空可关闭密码保护 |
auth_session_days | AUTH_SESSION_DAYS | 7 | 登录有效天数 |
check_rounds | CHECK_ROUNDS | 2 | 默认检测轮次 |
max_check_rounds | MAX_CHECK_ROUNDS | 3 | 页面允许选择的最大检测轮次 |
max_concurrent | MAX_CONCURRENT | 30 | 默认检测并发数 |
max_concurrent_limit | MAX_CONCURRENT_LIMIT | 200 | 用户可设置的最大并发数 |
timeout | TIMEOUT | 12 | 目标服务请求超时秒数 |
detect_timeout | DETECT_TIMEOUT | 8 | 自动识别代理协议时的单次超时秒数 |
run_log_limit | RUN_LOG_LIMIT | 100 | 每个 token 保留的检测日志条数 |
timezone | APP_TIMEZONE | UTC | 默认展示和计划任务时区 |
port | PORT | 8888 | HTTP 服务端口 |
log_file | LOG_FILE | server.log | 服务日志路径 |
[Unit]
Description=Proxy Checker
After=network.target
[Service]
WorkingDirectory=/opt/proxy-checker
ExecStart=/usr/bin/python3 /opt/proxy-checker/server.py
Restart=always
Environment=PORT=8888
Environment=AUTH_PASSWORD=change-me
[Install]
WantedBy=multi-user.target
如需本地构建镜像:
docker build -t proxy-checker:local .
启动容器:
docker run -d \
--name proxy-checker \
--restart unless-stopped \
-p 8888:8888 \
-e AUTH_PASSWORD=change-me \
-e APP_TIMEZONE=Asia/Shanghai \
-v proxy-checker-data:/data \
cxzjoy/proxy-checker:latest
打开:
http://localhost:8888
也可以使用 Compose:
AUTH_PASSWORD=change-me APP_TIMEZONE=Asia/Shanghai docker compose up -d --build
容器内默认使用 /data 保存运行态数据,包括 config.local.json、server.log、仓库数据、检测历史、自动任务配置和运行日志。建议始终挂载 volume,避免容器重建后丢失数据。
python tools/smoke.py --base-url http://localhost:8888 --password linux.do
测试内容包括:
/api/capabilities/api/start 默认常规检测proxy-checker/
├── index.html # 前端页面
├── app.js # 前端逻辑
├── server.py # Python HTTP 服务
├── api/index.py # Serverless / Flask 入口
├── proxy_check.py # 代理检测核心
├── fetch_proxies.py # 免费代理源
├── config.json # 默认配置
├── tools/smoke.py # Smoke test
├── PRODUCT.md # 产品上下文
├── requirements.txt # Python 依赖
├── repo_data/ # 运行期仓库数据,已忽略
├── checked_data/ # 运行期已检测记录,已忽略
├── auto_data/ # 运行期自动任务配置和状态,已忽略
├── run_logs/ # 运行期检测日志,已忽略
└── README.md
config.local.json、.env、日志文件、仓库数据、检测历史。MIT License
Content type
Image
Digest
sha256:4ecb45132…
Size
89.4 MB
Last updated
3 months ago
docker pull cxzjoy/proxy-checker