一个基于 Go 语言开发的高性能动态代理池系统,使用 Redis 作为存储,提供 REST API 接口获取可用代理。
- 🕷️ 多源代理爬取: 支持10+个免费代理网站,智能解析不同的HTML结构
- 🌐 中文代理源: 专门支持中文免费代理网站,包含SSL、匿名、地区代理
- 🔄 实时验证: 定期验证代理的可用性和响应时间,动态评分
- 📊 智能评分: 根据响应时间和成功率对代理进行评分排序
- 🎯 随机获取: 提供随机获取可用代理的 API 接口
- 🏆 最佳代理: 根据评分获取最佳性能的代理
- 📈 统计信息: 提供代理池的详细统计信息和监控
- 🚀 高性能: 使用 Redis 作为存储,支持高并发访问
- 🐳 Docker 支持: 提供完整的容器化部署方案
- 🛠️ 管理工具: CLI管理工具、测试工具、API客户端
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Proxy Sources │ │ HTTP Clients │ │ Admin Tools │
│ │ │ │ │ │
│ • Free Proxy │ │ • Go Client │ │ • CLI Manager │
│ • SSL Proxies │ │ • Python Client │ │ • Web Console │
│ • SOCKS Sources │ │ • JS Client │ │ • Monitoring │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ Proxy Pool System │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────┐│
│ │ Scraper │ │ Validator │ │ Storage │ │ API ││
│ │ │ │ │ │ │ │ ││
│ │ • Multi-src │ │ • Concurrent│ │ • Redis │ │ • REST ││
│ │ • Anti-ban │ │ • Scoring │ │ • Caching │ │ • JSON ││
│ │ • Parsing │ │ • Timeout │ │ • Sets │ │ • CORS ││
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────┘│
└─────────────────────────────────────────────────────────────────┘
- Go 1.24+
- Redis 6.0+
- 克隆项目
git clone https://github.com/difyz9/proxy-pool.git
cd proxy-pool- 安装依赖
go mod tidy- 启动 Redis
redis-server --daemonize yes- 配置环境变量(可选)
cp .env.example .env
# 编辑 .env 文件配置参数- 运行代理池服务
go run cmd/main.go
# 或者构建后运行
make build && ./bin/proxy-pool- 添加测试代理
go run tools/add_test_proxies.go# 使用 Docker Compose 一键启动
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f proxy-pool- Base URL:
http://localhost:8080 - Content-Type:
application/json
GET /api/v1/proxy/random?type={type}&valid_only={boolean}参数:
type(可选): 代理类型 (http或socks)valid_only(可选): 是否只返回有效代理 (默认:true)
响应示例:
{
"success": true,
"data": {
"id": "abc123",
"address": "192.168.1.1:8080",
"type": "http",
"country": "US",
"is_valid": true,
"response_time": 1200,
"score": 85,
"last_check": "2023-10-23T12:00:00Z"
}
}GET /api/v1/proxy/best?type={type}&valid_only={boolean}GET /api/v1/proxies?type={type}&valid_only={boolean}&limit={number}参数:
limit(可选): 返回数量限制 (默认: 10)
GET /api/v1/proxy/{id}GET /api/v1/stats响应示例:
{
"success": true,
"data": {
"total_proxies": 1000,
"valid_proxies": 800,
"http_proxies": 700,
"socks_proxies": 300,
"last_update": "2023-10-23T12:00:00Z"
}
}GET /api/v1/health# 构建 CLI 工具
make build-cli
# 查看统计信息
./bin/proxy-cli stats
# 列出代理
./bin/proxy-cli list [type] [limit]
# 清理无效代理
./bin/proxy-cli clean
# 删除指定代理
./bin/proxy-cli delete <proxy_id>
# 清空所有代理
./bin/proxy-cli clear# 构建爬取工具
make build-all-tools
# 测试所有代理源
./bin/test-sources
# 爬取中文代理源
./bin/chinese-scraper
# 添加测试代理
./bin/add-test-proxiespackage main
import (
"encoding/json"
"net/http"
)
type ProxyResponse struct {
Success bool `json:"success"`
Data *Proxy `json:"data"`
}
type Proxy struct {
Address string `json:"address"`
Type string `json:"type"`
}
func GetRandomProxy() (*Proxy, error) {
resp, err := http.Get("http://localhost:8080/api/v1/proxy/random")
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result ProxyResponse
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
return nil, err
}
return result.Data, nil
}import requests
def get_random_proxy():
response = requests.get('http://localhost:8080/api/v1/proxy/random')
data = response.json()
if data['success']:
return data['data']
else:
raise Exception("No proxy available")
# 使用示例
proxy = get_random_proxy()
print(f"Proxy: {proxy['address']} ({proxy['type']})")const axios = require('axios');
async function getRandomProxy() {
try {
const response = await axios.get('http://localhost:8080/api/v1/proxy/random');
return response.data.data;
} catch (error) {
throw new Error(`Failed to get proxy: ${error.message}`);
}
}
// 使用示例
getRandomProxy().then(proxy => {
console.log(`Proxy: ${proxy.address} (${proxy.type})`);
});| 变量名 | 描述 | 默认值 |
|---|---|---|
SERVER_PORT |
HTTP 服务端口 | 8080 |
REDIS_HOST |
Redis 主机地址 | localhost |
REDIS_PORT |
Redis 端口 | 6379 |
REDIS_PASSWORD |
Redis 密码 | |
SCRAPER_INTERVAL |
爬取间隔 | 30m |
VALIDATOR_INTERVAL |
验证间隔 | 5m |
VALIDATOR_TIMEOUT |
验证超时 | 10s |
VALIDATOR_CONCURRENT_NUM |
并发验证数 | 50 |
系统支持以下代理源:
国际源:
- Free Proxy List
- SSL Proxies
- Anonymous Proxies
- SOCKS Proxy Net
- Proxy Nova
- HideMyName
中文源:
- 免费代理列表 (zh-cn)
- SSL代理列表 (zh-cn)
- 匿名代理列表 (zh-cn)
- 英国代理列表 (zh-cn)
- 美国代理列表 (zh-cn)
- SOCKS代理列表 (zh-cn)
version: '3.8'
services:
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
proxy-pool:
build: .
ports:
- "8080:8080"
environment:
- REDIS_HOST=redis
- SCRAPER_INTERVAL=1h
- VALIDATOR_INTERVAL=10m
depends_on:
- redis
volumes:
redis_data:- Redis 优化
# redis.conf
maxmemory 512mb
maxmemory-policy allkeys-lru
save 900 1- 应用优化
export VALIDATOR_CONCURRENT_NUM=100
export SCRAPER_INTERVAL=1h
export VALIDATOR_INTERVAL=10mINFO: 常规操作日志WARN: 警告信息ERROR: 错误信息
- 代理总数
- 有效代理数
- 代理有效率
- 响应时间分布
- 爬取成功率
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
- ✅ 初始版本发布
- ✅ 支持多源代理爬取
- ✅ Redis 存储管理
- ✅ REST API 服务
- ✅ 代理验证系统
- ✅ Docker 支持
- ✅ 中文代理源支持
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
本项目仅供学习和研究使用。使用时请遵守相关网站的服务条款和当地法律法规。作者不对使用本项目造成的任何后果承担责任。
- 感谢所有免费代理网站提供的服务
- 感谢 Go 社区提供的优秀库
- 感谢所有贡献者的支持
- 项目地址: https://github.com/difyz9/proxy-pool
- 问题反馈: Issues
- 功能建议: Discussions
⭐ 如果这个项目对你有帮助,请给它一个星星!