# ProxyRotator

代理池轮换管理系统，支持代理导入、健康检测、智能轮换和 Telegram Bot 管理。

## 功能特性

- **代理导入** - 支持文本和文件批量导入，自动解析多种代理格式
- **健康检测** - 并发测试代理可用性，记录延迟和成功率
- **智能轮换** - 基于评分的代理选择，支持租约机制防止并发冲突
- **站点隔离** - 同一站点不会分配到相同代理，避免被封禁
- **Telegram Bot** - 通过 Telegram 管理代理池
- **REST API** - 完整的 HTTP API 接口

## 快速开始

### 环境要求

- Go 1.22+
- PostgreSQL 14+

### 安装

```bash
# 克隆仓库
git clone <repo-url>
cd proxyrotator

# 安装依赖
make deps

# 初始化数据库
export DATABASE_URL="postgres://postgres:password@localhost:5432/proxyrotator"
make migrate

# 构建
make build
```

### 配置

复制 `envexmaple` 为 `.env` 并修改配置：

```bash
DATABASE_URL=postgres://postgres:password@localhost:5432/proxyrotator
LISTEN_ADDR=0.0.0.0:9987
API_KEY=your-secret-key
RETURN_SECRET=true
MAX_CONCURRENCY=200
MAX_TEST_LIMIT=2000
LEASE_TTL=60s
```

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| DATABASE_URL | PostgreSQL 连接字符串 | - |
| LISTEN_ADDR | 监听地址 | 0.0.0.0:9987 |
| API_KEY | API 认证密钥 | - |
| RETURN_SECRET | 返回代理密码 | true |
| MAX_CONCURRENCY | 测试最大并发数 | 200 |
| MAX_TEST_LIMIT | 单次测试最大数量 | 2000 |
| LEASE_TTL | 代理租约有效期 | 60s |

### 运行

```bash
# 直接运行
make run

# 或使用编译后的二进制
./bin/proxyrotator

# 开发模式（热重载）
make dev
```

## API 接口

所有 API 请求需要在 Header 中携带 `X-API-Key`。

### 代理导入

```bash
# 文本导入
curl -X POST http://localhost:9987/v1/proxies/import/text \
  -H "X-API-Key: your-secret-key" \
  -H "Content-Type: application/json" \
  -d '{"text": "socks5://user:pass@1.2.3.4:1080\nhttp://5.6.7.8:8080"}'

# 文件导入
curl -X POST http://localhost:9987/v1/proxies/import/file \
  -H "X-API-Key: your-secret-key" \
  -F "file=@proxies.txt"
```

### 获取代理

```bash
# 获取下一个可用代理
curl http://localhost:9987/v1/proxies/next \
  -H "X-API-Key: your-secret-key"

# 指定分组和站点
curl "http://localhost:9987/v1/proxies/next?group=premium&site=example.com" \
  -H "X-API-Key: your-secret-key"
```

### 代理测试

```bash
# 批量测试代理
curl -X POST http://localhost:9987/v1/proxies/test \
  -H "X-API-Key: your-secret-key" \
  -H "Content-Type: application/json" \
  -d '{"group": "default", "limit": 100}'
```

### 使用反馈

```bash
# 报告代理使用结果
curl -X POST http://localhost:9987/v1/proxies/report \
  -H "X-API-Key: your-secret-key" \
  -H "Content-Type: application/json" \
  -d '{"lease_id": "xxx", "success": true}'
```

### 代理管理

```bash
# 列出代理
curl "http://localhost:9987/v1/proxies?group=default&status=alive" \
  -H "X-API-Key: your-secret-key"

# 获取统计信息
curl http://localhost:9987/v1/proxies/stats \
  -H "X-API-Key: your-secret-key"

# 删除代理
curl -X DELETE http://localhost:9987/v1/proxies/{id} \
  -H "X-API-Key: your-secret-key"
```

## 项目结构

```
.
├── server/             # 程序入口
├── internal/
│   ├── api/            # HTTP 路由和处理器
│   ├── config/         # 配置加载
│   ├── importer/       # 代理导入和解析
│   ├── model/          # 数据模型
│   ├── security/       # 安全相关
│   ├── selector/       # 代理选择器
│   ├── store/          # 数据库存储
│   ├── telegram/       # Telegram Bot
│   └── tester/         # 代理测试器
└── migrations/         # 数据库迁移
```

## 开发

```bash
# 格式化代码
make fmt

# 静态检查
make lint

# 运行测试
make test
```

## License

MIT
