一个高效的代理池系统,支持HTTP、HTTPS和SOCKS5协议,能够将带验证的远程代理转换为本地无验证代理,并提供自动轮换功能。系统采用LRU(最近最少使用)算法管理代理,针对高并发场景进行了优化。v2.0.0版本新增了双层代理功能,提供更高级别的匿名性保护。
- 多协议支持:同时支持HTTP、HTTPS和SOCKS5协议
- 代理转换:将带验证的远程代理转换为本地无验证代理
- 端口轮换:每次访问Web服务器刷新一次端口
- 一次性使用:每个端口在使用后自动切换到新的代理
- 高并发支持:优化的锁机制和代理池预热,支持高并发请求
- 大规模代理:支持使用大量代理,自动跳过无效代理
- 统计信息:提供代理使用情况的统计信息
- 双层代理:v2.0.0新增,通过两层代理转发流量,提高匿名性
graph LR
A[客户端] --> B{Web服务器\n7777端口}
B --> C[LRU代理池]
C --> D[双协议代理\n10000-10099端口]
D --> E[远程SOCKS5/HTTP代理]
E --> F[目标网站]
graph LR
A[客户端] --> B{Web服务器\n7777端口}
B --> C[LRU代理池]
C --> D[双协议代理\n10000-10099端口]
D --> E[第一层代理]
E --> G[第二层代理]
G --> F[目标网站]
- 代理服务器:双协议代理服务器,同时支持HTTP和SOCKS5
- 代理池:LRU代理池,高效管理大量代理
- Web服务器:提供简单的HTTP接口获取代理地址
- 主程序:proxy_server_main.py,系统入口
stateDiagram-v2
[*] --> 空闲
空闲 --> 使用中: 被分配
使用中 --> 回收中: 使用完成
回收中 --> 空闲: 健康检查通过
回收中 --> 失效: 健康检查失败
失效 --> [*]
# 1. 安装依赖
pip install -r requirements.txt
# 2. 配置代理 (all_proxies.txt)
# 格式: IP地址 端口 用户名 密码
# 例如: 192.168.1.1 1080 username password
# 3. 启动服务器 (单层代理模式)
python proxy_server_main.py --max-active-proxies 100
# 或者启动双层代理模式 (v2.0.0新增)
python proxy_server_main.py --dual-proxy --max-active-proxies 100- 获取代理: 访问
http://127.0.0.1:7777 - 使用代理: 使用返回的地址 (如
127.0.0.1:10001) - 查看统计: 访问
http://127.0.0.1:7777/stats
系统通过以下流程工作:
- 初始化: 预热代理池,准备多个本地端口
- 请求处理: 客户端请求代理时返回一个本地端口
- 代理转发: 本地端口将流量转发到远程代理
- 自动切换: 使用后端口自动切换到新的远程代理
sequenceDiagram
participant Client
participant WebServer as Web Server (7777)
participant LRUPool as LRU Proxy Pool
participant DualProxy as Dual Proxy (10000-10099)
participant RemoteSOCKS5 as Remote SOCKS5 Proxy
%% 第一阶段:获取代理
Client->>WebServer: GET /get_proxy
WebServer->>LRUPool: 请求可用代理
LRUPool-->>WebServer: 返回代理A(本地端口10001)
WebServer-->>Client: 响应 127.0.0.1:10001
%% 第二阶段:使用代理
Client->>DualProxy: 通过10001端口访问
DualProxy->>RemoteSOCKS5: 流量转发至代理A实际节点
RemoteSOCKS5-->>DualProxy: 返回目标网站数据
DualProxy-->>Client: 转发响应数据
%% 第三阶段:代理轮换
Note over LRUPool,DualProxy: 使用后,端口10001自动切换到新的远程代理
%% 第四阶段:下一次请求
Client->>WebServer: GET /get_proxy (再次请求)
WebServer->>LRUPool: 请求可用代理
LRUPool-->>WebServer: 返回代理B(本地端口10002)
WebServer-->>Client: 响应 127.0.0.1:10002
python proxy_server_main.py --help主要参数:
--host:Web服务器地址 (默认: 127.0.0.1)--port:Web服务器端口 (默认: 7777)--proxy-file:代理列表文件 (默认: all_proxies.txt)--max-active-proxies:最大活跃代理数量 (默认: 200)--dual-proxy:启用双层代理模式 (v2.0.0新增)
- 网络爬虫:频繁切换IP地址的爬虫程序
- 数据采集:避免IP被封禁的数据采集程序
- API访问:绕过API访问限制的应用
- 匿名访问:匿名访问互联网的应用
- 高并发系统:处理大量并发请求的系统
# 增加活跃代理数量,提高并发能力
python proxy_server_main.py --max-active-proxies 300
# 启用双层代理模式,提高匿名性
python proxy_server_main.py --dual-proxy --max-active-proxies 100
# 性能测试 (单层代理)
python tests/test_high_concurrency.py --concurrency 50
# 双层代理测试
python tests/test_dual_proxy.py --concurrency 10MIT