proxyPool

module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 8, 2024 License: MIT

README

ProxyPool

一个基于 Go 的高性能代理池系统,支持自动抓取、验证和提供代理服务。

功能特点

  • 支持多种代理类型(HTTP/HTTPS/SOCKS4/SOCKS5)
  • 自动抓取免费代理
  • 定时验证可用性
  • RESTful API 接口
  • 代理质量评分
  • 安全特性
    • 基本认证 (Basic Auth)
    • API Key 认证
    • IP 访问频率限制
    • 自动封禁异常 IP
    • 所有安全特性可配置

快速开始

环境要求
  • Redis 6.0+ (必需)
部署步骤
  1. 首先需要运行 Redis 服务(以下方式二选一):

    a. 使用 Docker 运行 Redis(推荐):

    docker pull redis:latest
    docker run -d --name redis -p 6379:6379 redis:latest
    

    b. 直接安装 Redis:

    • Linux: apt install redis-serveryum install redis
    • macOS: brew install redis
    • Windows: 从 Redis 官网下载安装包
  2. 运行 ProxyPool:

    # 解压下载的发布包
    unzip proxypool-{对应平台}.zip
    cd proxypool-{对应平台}
    
    # 运行服务
    ./proxypool-{对应平台}
    
Redis 配置

data/config.toml 中配置 Redis 连接信息:

[redis]
host = "localhost"    # Redis 服务器地址
port = 6379          # Redis 端口
password = ""        # Redis 密码(如果有)
db = 0              # 使用的数据库编号
API 使用
  1. 获取单个代理
curl "http://localhost:8080/proxy"
  1. 获取指定类型代理
curl "http://localhost:8080/proxy?type=http,https&count=5"
  1. 获取高匿代理
curl "http://localhost:8080/proxy?anonymous=true"
认证方式
  1. 基本认证 (Basic Auth)
# 使用用户名密码访问
curl -u admin:123456 "http://localhost:8080/proxy"

# 使用 base64 编码方式
curl -H "Authorization: Basic YWRtaW46MTIzNDU2" "http://localhost:8080/proxy"
  1. API Key 认证
# 在请求头中携带 API Key
curl -H "X-API-Key: your-api-key" "http://localhost:8080/proxy"
访问限制
  • 每个 IP 在指定时间窗口内有请求次数限制
  • 超过限制后 IP 会被临时封禁
  • 可以通过响应头查看限制情况:
    • X-RateLimit-Remaining: 剩余请求次数
    • X-RateLimit-Limit: 总请求限制
    • X-RateLimit-Reset: 重置时间
配置安全特性

data/config.toml 中配置:

[security]
# 基本认证
auth_enabled = false     # 是否启用认证
username = "admin"       # 认证用户名
password = "123456"      # 认证密码

# API Key认证
api_key_enabled = true   # 是否启用 API Key
api_keys = ["key1", "key2", "key3"]  # 允许的 API Key 列表

# 限流配置
rate_limit_enabled = true  # 是否启用限流
rate_limit = 100          # 每个时间窗口最大请求数
rate_window = 1           # 时间窗口(分钟)
ban_duration = 24         # 封禁时长(小时)
响应格式
{
    "code": 200,
    "message": "success",
    "data": {
        "ip": "1.2.3.4",
        "port": "8080",
        "type": "http",
        "anonymous": true,
        "speed_ms": 500,
        "score": 100
    }
}
配置说明

配置文件位于 data/config.toml,主要配置项:

  • Redis 连接信息(必需配置)
  • 代理验证参数
  • 爬虫更新间隔
  • 日志配置
  • 安全特性配置

添加代理源

  1. internal/crawler/sources 目录下创建新的源文件,例如 myproxy.go
package sources

type MyProxySource struct {
    BaseSource
}

func NewMyProxySource() *MyProxySource {
    return &MyProxySource{
        BaseSource: BaseSource{name: "myproxy"},
    }
}

func (s *MyProxySource) Fetch() ([]*model.Proxy, error) {
    // 实现代理获取逻辑
    proxies := make([]*model.Proxy, 0)
    
    // ... 获取代理的具体实现 ...
    
    return proxies, nil
}
  1. internal/crawler/crawler.go 中注册新代理源:
func NewManager(storage storage.Storage, validator *validator.Validator) *Manager {
    return &Manager{
        sources: []sources.Source{
            sources.NewOpenProxyListSource(),
            sources.NewMyProxySource(),  // 添加新代理源
        },
        storage:   storage,
        validator: validator,
    }
}

常见问题

  1. Redis 连接失败

    • 检查 Redis 服务是否正常运行
    • 确认配置文件中的 Redis 连接信息是否正确
    • 确保 Redis 端口(默认6379)未被占用
  2. 配置文件找不到

    • 确保 data 目录与程序在同一目录下
    • 确保 data/config.toml 文件存在且格式正确

Docker 部署

1. 准备配置文件

首先创建本地配置目录和配置文件:

# 创建配置目录
mkdir -p /path/to/data

# 创建配置文件
cat > /path/to/data/config.toml << EOF
[server]
port = 8080
mode = "release"

[redis]
host = "redis"    # 如果使用docker-compose,这里填redis服务名
port = 6379
password = ""
db = 0

# ... 其他配置 ...
EOF
2. 运行容器
docker run -d \
  --name proxypool \
  -p 8080:8080 \
  -v /path/to/data:/app/data \
  --network your-network \  # 如果需要连接到Redis容器
  langchou/proxypool:latest
3. Docker Compose 部署(推荐)

创建 docker-compose.yml

version: '3'

services:
  redis:
    image: redis:latest
    restart: always
    volumes:
      - redis_data:/data
    networks:
      - proxypool_net

  proxypool:
    image: langchou/proxypool:latest
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - ./data:/app/data
    depends_on:
      - redis
    networks:
      - proxypool_net

volumes:
  redis_data:

networks:
  proxypool_net:

运行服务:

docker-compose up -d
4. 查看日志
# 查看容器日志
docker logs -f proxypool

# 查看数据目录下的日志文件
ls -l /path/to/data/logs/

License

MIT License

Directories

Path Synopsis
internal
api

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL