本项目核心代码来自 rnet。这是一个基于 rnet v3.0.0rc17 封装的 HTTP API 转发服务,提供 TLS 指纹模拟、会话池管理、Cookie 管理等功能。
- 🔐 TLS 指纹模拟 - 支持 100+ 浏览器指纹(Chrome、Safari、Firefox、Edge、Opera、OkHttp)
- 🏊 会话池管理 - 自动管理会话生命周期,10分钟超时自动清理
- 🍪 Cookie 管理 - 获取、设置、清除会话 Cookie
- 🌐 代理支持 - HTTP/HTTPS/SOCKS4/SOCKS5 代理,可随时切换
- ⚡ 异步并发 - 基于 asyncio 的高性能异步处理
- 📄 协议控制 - 支持 HTTP/1.1 和 HTTP/2,自定义请求头排序
- 🖼️ 二进制处理 - 图片等二进制响应自动 Base64 编码
pip install -r requirements.txt或手动安装:
pip install fastapi uvicorn pydantic pydantic-settings
pip install rnet --pre --upgrade# 开发模式
uvicorn app.main:app --reload --host 0.0.0.0 --port 8080
# 生产模式
uvicorn app.main:app --host 0.0.0.0 --port 8080 --workers 4- Swagger UI: http://localhost:8080/docs
- ReDoc: http://localhost:8080/redoc
POST /api/forward
{
"session_id": "可选,会话ID",
"url": "https://httpbin.org/get",
"method": "GET",
"headers": {"User-Agent": "Mozilla/5.0"},
"body": "请求体",
"json_body": {"key": "value"},
"form_data": {"field": "value"},
"timeout": 30,
"follow_redirects": true,
"http_version": "2",
"header_order": ["Host", "User-Agent", "Accept"]
}响应示例:
{
"success": true,
"status_code": 200,
"headers": {"Content-Type": "application/json"},
"body": "响应内容",
"is_base64": false,
"cookies": [],
"url": "https://httpbin.org/get",
"elapsed_ms": 123
}| 接口 | 方法 | 描述 |
|---|---|---|
/api/session/create |
POST | 创建新会话 |
/api/session/{session_id} |
GET | 获取会话信息 |
/api/session/{session_id} |
DELETE | 删除会话 |
创建会话请求:
{
"session_id": "可选,自定义ID",
"emulation": "Chrome143",
"proxy": "http://user:pass@host:port",
"http_version": "2",
"timeout_minutes": 10
}| 接口 | 方法 | 描述 |
|---|---|---|
/api/session/{session_id}/cookies |
GET | 获取 Cookie |
/api/session/{session_id}/cookies |
POST | 设置 Cookie |
/api/session/{session_id}/cookies |
DELETE | 清除 Cookie |
| 接口 | 方法 | 描述 |
|---|---|---|
/api/session/{session_id}/proxy |
PUT | 更新代理 |
更新代理请求:
{
"proxy": "socks5://127.0.0.1:1080"
}| 接口 | 方法 | 描述 |
|---|---|---|
/api/status |
GET | 服务状态 |
/api/emulations |
GET | 支持的浏览器列表 |
Chrome100, Chrome101, Chrome104-Chrome110, Chrome114, Chrome116-Chrome143
Safari15_3 - Safari26_2, SafariIos, SafariIPad
Firefox109, Firefox117, Firefox128, Firefox133-Firefox146
Edge101, Edge122, Edge127, Edge131-Edge142
Opera116 - Opera119
OkHttp3_9 - OkHttp5
通过环境变量配置:
| 变量 | 默认值 | 描述 |
|---|---|---|
RNET_API_HOST |
0.0.0.0 | 服务监听地址 |
RNET_API_PORT |
8080 | 服务端口 |
RNET_API_SESSION_TIMEOUT_MINUTES |
10 | 会话超时时间(分钟) |
RNET_API_CLEANUP_INTERVAL_SECONDS |
60 | 清理检查间隔(秒) |
RNET_API_MAX_SESSIONS |
1000 | 最大会话数 |
RNET_API_DEFAULT_TIMEOUT_SECONDS |
30 | 默认请求超时 |
RNET_API_LOG_LEVEL |
INFO | 日志级别 |
或使用 .env 文件:
RNET_API_SESSION_TIMEOUT_MINUTES=30
RNET_API_MAX_SESSIONS=500rnet_api/
├── app/
│ ├── __init__.py # 包初始化
│ ├── main.py # FastAPI 主应用
│ ├── config.py # 配置管理
│ ├── models.py # 数据模型
│ ├── session_pool.py # 会话池管理器
│ ├── request_handler.py # 请求处理器
│ └── response_handler.py # 响应处理器
├── docs/
│ └── API_DOCS.md # API 详细文档
├── requirements.txt # 依赖列表
└── README.md # 项目说明
import requests
# 创建会话
session = requests.post("http://localhost:8080/api/session/create", json={
"emulation": "Chrome143",
"proxy": "http://127.0.0.1:8080"
}).json()
session_id = session["session_id"]
# 发送请求
response = requests.post("http://localhost:8080/api/forward", json={
"session_id": session_id,
"url": "https://httpbin.org/get",
"method": "GET"
}).json()
print(response["body"])
# 获取 Cookie
cookies = requests.get(f"http://localhost:8080/api/session/{session_id}/cookies").json()
print(cookies)
# 删除会话
requests.delete(f"http://localhost:8080/api/session/{session_id}")# 创建会话
curl -X POST http://localhost:8080/api/session/create \
-H "Content-Type: application/json" \
-d '{"emulation": "Chrome143"}'
# 发送请求
curl -X POST http://localhost:8080/api/forward \
-H "Content-Type: application/json" \
-d '{"url": "https://httpbin.org/get", "method": "GET"}'
# 获取状态
curl http://localhost:8080/api/statusMIT License