# 代理与反检测增强功能

## 概述

本次更新为 multi-platform-media-manage 项目添加了以下增强功能，以解决跨区域发布时遇到的风控问题。

## ⚠️ 重要说明：代理使用策略

### 神龙代理 IP 限制
- **有效期**：3 分钟
- **适用场景**：页面访问、信息填充、小额数据传输
- **不适用场景**：大文件上传（视频文件）

### 平台特殊策略

**微信视频号（weixin）**：
- ❌ **不使用代理**：大视频上传会超过 3 分钟，导致代理超时
- ✅ **使用直连**：配合反检测脚本，可以有效绕过风控
- ✅ **推荐配置**：
  ```json
  {
    "platform": "weixin",
    "proxy": {
      "enabled": false  // 微信视频号建议不使用代理
    }
  }
  ```

**其他平台**：
- 抖音、小红书、快手：可以使用代理（小文件上传）
- 大视频文件（> 50MB）：建议使用直连

## 新增功能

### 1. 反检测脚本 (Stealth Scripts)

**文件**: `server/python/utils/stealth.py`

提供以下反检测能力：
- **隐藏 WebDriver 特征**: 移除 `navigator.webdriver` 属性
- **伪装浏览器插件**: 模拟真实的 Chrome 插件列表
- **WebGL 指纹伪装**: 随机化 WebGL vendor 和 renderer
- **Canvas 指纹噪声**: 添加微小噪声避免指纹追踪
- **Audio 指纹噪声**: 干扰音频指纹识别
- **Navigator 属性伪装**: 伪装设备内存、CPU 核心数等

### 2. 增强的浏览器初始化

**文件**: `server/python/platforms/base.py`

改进的 `init_browser` 方法：
- 自动注入反检测脚本
- 添加真实的浏览器启动参数
- 设置完整的 HTTP 请求头
- 支持代理配置

### 3. 代理质量检测

**文件**: `server/python/app.py`

新增 `_test_proxy_for_platform` 函数：
- 测试代理 IP 对特定平台的可用性
- 检测是否被目标平台屏蔽
- 返回延迟和状态码信息

### 4. 代理测试 API

**端点**: `POST /proxy/test`

用于在发布前测试代理配置：

```json
// 请求
{
    "provider": "shenlong",
    "productKey": "your-product-key",
    "signature": "your-signature",
    "platform": "douyin"  // 可选，测试对特定平台的可用性
}

// 响应
{
    "success": true,
    "proxy": "http://x.x.x.x:port",
    "platform_test": {
        "ok": true,
        "blocked": false,
        "cost_ms": 1234
    }
}
```

### 5. 人类行为模拟

**文件**: `server/python/platforms/base.py`

新增方法：
- `human_like_delay()`: 模拟随机延迟
- `human_like_scroll()`: 模拟滚动行为
- `human_like_type()`: 模拟输入行为
- `random_mouse_move()`: 随机移动鼠标

## 使用方式

### 1. 基本发布（带代理）

```json
POST /publish
{
    "platform": "douyin",
    "cookie": "your-cookies",
    "title": "视频标题",
    "video_path": "/path/to/video.mp4",
    "proxy": {
        "enabled": true,
        "provider": "shenlong",
        "productKey": "your-key",
        "signature": "your-sign",
        "regionCode": "500000"  // 重庆
    }
}
```

### 2. AI 辅助发布（推荐）

```json
POST /publish/ai-assisted
{
    "platform": "douyin",
    "cookie": "your-cookies",
    "title": "视频标题",
    "video_path": "/path/to/video.mp4",
    "headless": false,  // 显示浏览器窗口，便于处理验证码
    "return_screenshot": true,
    "proxy": {
        "enabled": true,
        "provider": "shenlong",
        "productKey": "your-key",
        "signature": "your-sign"
    }
}
```

### 3. 测试代理配置

```bash
curl -X POST http://localhost:5005/proxy/test \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "shenlong",
    "productKey": "your-key",
    "signature": "your-sign",
    "platform": "douyin"
  }'
```

## 最佳实践

### 1. 代理配置建议

- **使用高质量代理**: 选择住宅 IP 代理，避免数据中心 IP
- **地区匹配**: 尽量使用与账号注册地相近的代理 IP
- **运营商匹配**: 选择与目标平台主要用户群相同的运营商

### 2. 发布策略

1. **首次发布**:
   - 使用 `headless: false` 显示浏览器窗口
   - 观察 Cookie 状态和验证码情况
   - 记录成功的配置

2. **批量发布**:
   - 每个账号使用独立的代理 IP
   - 控制发布频率（建议间隔 30 分钟以上）
   - 使用定时发布分散时间

3. **遇到验证码**:
   - 响应 `need_captcha: true` 时手动处理
   - 处理完成后重试发布
   - 考虑更换代理 IP

### 3. 调试建议

1. **查看日志**:
```
[Proxy] shenlong resolved: city=- area=500100 candidates=5/10
[Proxy] test ok: 192.168.***.***:8080 cost=234ms
[Proxy] platform douyin ok: 192.168.***.***:8080 cost=1234ms
[douyin] 已注入反检测脚本
```

2. **检查截图**:
   - 发布失败时返回 `screenshot_base64`
   - 可解码查看页面状态

## 常见问题

### Q1: 代理连接成功但发布失败？

**原因**: 代理 IP 可能被目标平台标记

**解决方案**:
1. 使用 `/proxy/test` 接口测试代理
2. 更换代理地区或运营商
3. 使用新的代理 IP

### Q2: 频繁触发验证码？

**原因**: 浏览器指纹或行为模式被识别

**解决方案**:
1. 确保反检测脚本正常加载（查看日志）
2. 降低操作频率
3. 使用 `headless: false` 观察页面行为

### Q3: Cookie 快速失效？

**原因**: 代理 IP 与账号登录地不一致

**解决方案**:
1. 使用与账号注册地相近的代理
2. 避免频繁切换 IP
3. 使用同一代理维护账号

## 技术细节

### 反检测脚本加载顺序

1. 浏览器启动时添加 `--disable-blink-features=AutomationControlled` 参数
2. 创建上下文时注入 `add_init_script()`
3. 页面加载前脚本已生效

### 代理测试流程

1. 基础连通性测试 (`_test_proxy_connectivity`)
2. 平台特定测试 (`_test_proxy_for_platform`)
3. 检测是否被重定向到验证页面
4. 返回详细测试结果

## 更新日志

### 2026-02-27
- 新增 `utils/stealth.py` 反检测脚本
- 增强 `base.py` 浏览器初始化
- 添加平台特定代理测试
- 新增 `/proxy/test` 和 `/proxy/platforms` API
- 更新代理解析函数支持平台参数
