Skip to content

difyz9/proxy-pool

Repository files navigation

🔄 Dynamic Proxy Pool

Go Version License Build Status

一个基于 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+

安装和运行

  1. 克隆项目
git clone https://github.com/difyz9/proxy-pool.git
cd proxy-pool
  1. 安装依赖
go mod tidy
  1. 启动 Redis
redis-server --daemonize yes
  1. 配置环境变量(可选)
cp .env.example .env
# 编辑 .env 文件配置参数
  1. 运行代理池服务
go run cmd/main.go
# 或者构建后运行
make build && ./bin/proxy-pool
  1. 添加测试代理
go run tools/add_test_proxies.go

Docker 部署

# 使用 Docker Compose 一键启动
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f proxy-pool

📚 API 文档

基础信息

  • Base URL: http://localhost:8080
  • Content-Type: application/json

端点列表

1. 获取随机代理

GET /api/v1/proxy/random?type={type}&valid_only={boolean}

参数:

  • type (可选): 代理类型 (httpsocks)
  • 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"
  }
}

2. 获取最佳代理

GET /api/v1/proxy/best?type={type}&valid_only={boolean}

3. 获取代理列表

GET /api/v1/proxies?type={type}&valid_only={boolean}&limit={number}

参数:

  • limit (可选): 返回数量限制 (默认: 10)

4. 获取代理详情

GET /api/v1/proxy/{id}

5. 获取统计信息

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"
  }
}

6. 健康检查

GET /api/v1/health

🛠️ 管理工具

CLI 管理工具

# 构建 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-proxies

📦 客户端示例

Go 客户端

package 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
}

Python 客户端

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']})")

JavaScript/Node.js 客户端

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)

🚀 生产部署

Docker Compose (推荐)

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:

性能优化

  1. Redis 优化
# redis.conf
maxmemory 512mb
maxmemory-policy allkeys-lru
save 900 1
  1. 应用优化
export VALIDATOR_CONCURRENT_NUM=100
export SCRAPER_INTERVAL=1h
export VALIDATOR_INTERVAL=10m

📊 监控和日志

日志级别

  • INFO: 常规操作日志
  • WARN: 警告信息
  • ERROR: 错误信息

监控指标

  • 代理总数
  • 有效代理数
  • 代理有效率
  • 响应时间分布
  • 爬取成功率

🤝 贡献指南

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📝 更新日志

v1.0.0 (2023-10-23)

  • ✅ 初始版本发布
  • ✅ 支持多源代理爬取
  • ✅ Redis 存储管理
  • ✅ REST API 服务
  • ✅ 代理验证系统
  • ✅ Docker 支持
  • ✅ 中文代理源支持

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

⚠️ 免责声明

本项目仅供学习和研究使用。使用时请遵守相关网站的服务条款和当地法律法规。作者不对使用本项目造成的任何后果承担责任。

🙏 致谢

  • 感谢所有免费代理网站提供的服务
  • 感谢 Go 社区提供的优秀库
  • 感谢所有贡献者的支持

📞 联系方式


⭐ 如果这个项目对你有帮助,请给它一个星星!

About

一个基于 Go 语言开发的高性能动态代理池系统,使用 Redis 作为存储,提供 REST API 接口获取可用代理。

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages