Files
karuo-ai/03_卡木(木)/木根_逆向分析/网站逆向分析/SKILL.md

31 KiB
Raw Blame History

name, description, triggers, owner, group, version, updated
name description triggers owner group version updated
网站逆向分析 网站API逆向分析与SDK自动生成 逆向分析、模拟登录、API抓取、SDK生成 木根 3.0 2026-02-16

网站逆向分析技能 v3.0

📅 创建日期2026-01-21 📅 更新日期2026-01-21v3.0 深度优化,整合实战经验) 📋 基于存客宝核心技术 + GitHub开源生态 + 万推实战经验快速分析并封装任意需授权网站的API服务层


🎯 技能概述

本技能用于对需要登录授权的第三方网站进行系统性逆向分析自动化提取API接口并封装成可复用的服务层。

核心能力

  1. 模拟登录支持Cookie、Session、OAuth2.0、JWT、WebSocket等多种认证方式
  2. 接口发现自动捕获网站所有API请求生成OpenAPI规范文档
  3. SDK生成基于OpenAPI自动生成类型安全的Python SDK
  4. Docker部署一键部署为API代理服务支持会话管理和缓存
  5. 反检测集成Playwright Stealth绕过常见反爬虫检测
  6. 矩阵发布集成social-auto-upload支持多平台视频批量发布

v3.0 核心升级(基于万推实战经验)

能力 工具/方案 说明
多平台视频发布 social-auto-upload 抖音/快手/B站/小红书/视频号 Cookie直发
OAuth授权绕过 Cookie替代方案 无需扫码授权Cookie直接使用
第三方平台集成 SDK封装模式 登录→获取账号→上传→创建任务
本地视频上传 OSS中转方案 本地文件先传OSS再用公网URL发布
实时状态反馈 分步错误码 login_failed/upload_failed/task_failed

🚀 触发词

  • 逆向分析网站
  • 分析网站接口
  • 模拟登录网站
  • 封装网站API
  • 网站接口提取
  • HAR转SDK
  • 多平台发布
  • Cookie发布

🏗️ 技术架构 v3.0

整体架构(含矩阵发布层)

┌─────────────────────────────────────────────────────────────────────────────────┐
│                           网站逆向分析引擎 v3.0                                   │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│   ┌─────────────────────────────────────────────────────────────────────────┐   │
│   │                          第一层:流量捕获层                               │   │
│   │  ┌───────────────┐    ┌───────────────┐    ┌───────────────┐           │   │
│   │  │ Playwright    │ ←→ │   mitmproxy   │ ←→ │  HAR导出      │           │   │
│   │  │ + Stealth     │    │   代理拦截    │    │  (浏览器)     │           │   │
│   │  └───────────────┘    └───────────────┘    └───────────────┘           │   │
│   └─────────────────────────────────────────────────────────────────────────┘   │
│                                      ↓                                          │
│   ┌─────────────────────────────────────────────────────────────────────────┐   │
│   │                          第二层:规范生成层                               │   │
│   │  ┌───────────────┐    ┌───────────────┐    ┌───────────────┐           │   │
│   │  │ mitmproxy2    │ →  │   OpenAPI     │ →  │   AI增强      │           │   │
│   │  │ swagger       │    │   3.0/3.1     │    │ (参数推断)    │           │   │
│   │  └───────────────┘    └───────────────┘    └───────────────┘           │   │
│   └─────────────────────────────────────────────────────────────────────────┘   │
│                                      ↓                                          │
│   ┌─────────────────────────────────────────────────────────────────────────┐   │
│   │                          第三层SDK生成层                                │   │
│   │  ┌───────────────┐    ┌───────────────┐    ┌───────────────┐           │   │
│   │  │ openapi-      │    │   web2sdk     │    │  自定义SDK    │           │   │
│   │  │ python-client │    │ (HAR直接SDK)  │    │  (httpx)      │           │   │
│   │  └───────────────┘    └───────────────┘    └───────────────┘           │   │
│   └─────────────────────────────────────────────────────────────────────────┘   │
│                                      ↓                                          │
│   ┌─────────────────────────────────────────────────────────────────────────┐   │
│   │                      第四层:矩阵发布层 (v3.0新增)                        │   │
│   │  ┌───────────────┐    ┌───────────────┐    ┌───────────────┐           │   │
│   │  │ social-auto-  │    │  第三方矩阵   │    │   混合模式    │           │   │
│   │  │ upload        │    │  平台SDK      │    │  (优先级)     │           │   │
│   │  │ (Cookie直发)  │    │  (呆头鹅等)   │    │               │           │   │
│   │  └───────────────┘    └───────────────┘    └───────────────┘           │   │
│   └─────────────────────────────────────────────────────────────────────────┘   │
│                                      ↓                                          │
│   ┌─────────────────────────────────────────────────────────────────────────┐   │
│   │                          第五层:服务部署层                               │   │
│   │  ┌───────────────┐    ┌───────────────┐    ┌───────────────┐           │   │
│   │  │   FastAPI     │ ←→ │  SQLite/Redis │ ←→ │   Docker      │           │   │
│   │  │   代理服务    │    │  状态/缓存    │    │   容器化      │           │   │
│   │  └───────────────┘    └───────────────┘    └───────────────┘           │   │
│   └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

🔥 实战经验总结(万推项目踩坑记录)

问题1OAuth授权无法自动化

场景:想要自动将万推账号同步到呆头鹅平台

问题

  • 抖音/快手等平台的OAuth授权需要用户手机扫码确认
  • 无法通过API自动完成授权必须人工操作
  • 第三方矩阵平台如呆头鹅的账号是通过OAuth授权获取的

解决方案

方案A使用Cookie替代OAuth
- 用户手动登录平台后获取Cookie
- 用Cookie直接模拟登录状态发布视频
- 推荐工具social-auto-uploadGitHub开源

方案B引导用户到授权页
- 提供一键跳转到第三方平台授权页
- 用户完成授权后,系统自动同步账号信息
- 适用于必须使用第三方平台的场景

代码示例

# 双通道发布策略
async def publish_video(account, video, title):
    # 优先级1有第三方平台ID走第三方通道
    if account.third_party_user_id:
        return await publish_via_third_party(
            video_path=video.file_path,
            user_ids=[account.third_party_user_id],
            title=title
        )
    
    # 优先级2有Cookie走Cookie直发
    elif account.cookies:
        return await publish_with_cookie(
            platform=account.platform,
            video_path=video.file_path,
            cookies=account.cookies,
            title=title
        )
    
    # 无法发布
    else:
        return {"success": False, "error": "no_auth: 账号未授权请获取Cookie或完成平台授权"}

问题2本地视频无法被第三方平台访问

场景:本地上传的视频路径为 http://localhost:8000/uploads/xxx.mp4

问题

  • 第三方矩阵平台如呆头鹅的API需要公网可访问的视频URL
  • localhost地址只能本机访问第三方服务器无法下载

解决方案

方案A先上传到第三方平台的OSS
- 调用第三方平台的视频上传接口
- 获取公网URL后再创建发布任务

方案B使用自己的OSS服务
- 上传到阿里云/腾讯云OSS
- 生成公网访问链接

方案C使用内网穿透
- ngrok/frp等工具暴露本地服务
- 临时方案,不推荐生产环境

代码示例

async def publish_via_third_party(video_path: str, user_ids: list, title: str):
    sdk = ThirdPartySDK()
    await sdk.login(username, password)
    
    # 关键:检查视频来源
    video_url = video_path
    if not video_path.startswith("http"):
        # 本地文件先上传到第三方OSS
        logger.info(f"上传本地视频: {video_path}")
        uploaded_url = await sdk.upload_video(video_path)
        if not uploaded_url:
            return {"success": False, "error": "video_upload_failed: 视频上传失败"}
        video_url = uploaded_url
        logger.info(f"视频上传成功: {video_url}")
    
    # 使用公网URL创建任务
    result = await sdk.create_task(
        video_url=video_url,
        user_ids=user_ids,
        task_name=f"任务-{title[:15]}"
    )
    return result

问题3Cookie格式转换

场景不同来源的Cookie格式不同需要统一处理

问题

  • 浏览器导出的Cookie可能是JSON数组或key=value字符串
  • Playwright需要特定的storage_state格式
  • 不同平台的Cookie域名不同

解决方案

def prepare_cookie_file(cookies: str, platform: str, output_file: str) -> bool:
    """将Cookie转换为Playwright storage_state格式"""
    
    # 平台域名映射
    platform_domains = {
        "douyin": [".douyin.com", "creator.douyin.com"],
        "kuaishou": [".kuaishou.com", "cp.kuaishou.com"],
        "bilibili": [".bilibili.com", "member.bilibili.com"],
        "xiaohongshu": [".xiaohongshu.com", "creator.xiaohongshu.com"],
        "shipinhao": [".qq.com", "channels.weixin.qq.com"],
    }
    
    domains = platform_domains.get(platform, [f".{platform}.com"])
    
    # 解析Cookie
    if cookies.strip().startswith('['):
        # JSON数组格式
        cookie_list = json.loads(cookies)
    elif cookies.strip().startswith('{'):
        # 单个JSON对象
        cookie_list = [json.loads(cookies)]
    else:
        # key=value; 格式
        cookie_list = []
        for item in cookies.split(';'):
            if '=' in item:
                key, value = item.strip().split('=', 1)
                cookie_list.append({
                    "name": key.strip(),
                    "value": value.strip(),
                    "domain": domains[0],
                    "path": "/"
                })
    
    # 转换为Playwright格式
    playwright_cookies = []
    for cookie in cookie_list:
        playwright_cookies.append({
            "name": cookie.get("name", ""),
            "value": cookie.get("value", ""),
            "domain": cookie.get("domain", domains[0]),
            "path": cookie.get("path", "/"),
            "secure": cookie.get("secure", True),
            "httpOnly": cookie.get("httpOnly", False),
            "sameSite": cookie.get("sameSite", "Lax"),
            "expires": cookie.get("expires", time.time() + 365*24*3600)
        })
    
    # 保存为storage_state格式
    storage_state = {
        "cookies": playwright_cookies,
        "origins": []
    }
    
    with open(output_file, 'w') as f:
        json.dump(storage_state, f)
    
    return True

问题4数据库Schema迁移

场景需要给现有表添加新字段如daitou_user_id

问题

  • SQLAlchemy的ORM模型更新后数据库表不会自动更新
  • 直接ALTER TABLE可能导致数据丢失
  • 需要检查字段是否已存在

解决方案

def migrate_database():
    """安全的数据库迁移"""
    import sqlite3
    
    conn = sqlite3.connect('app.db')
    cursor = conn.cursor()
    
    # 检查字段是否存在
    cursor.execute('PRAGMA table_info(platform_accounts)')
    columns = [col[1] for col in cursor.fetchall()]
    
    # 安全添加新字段
    if 'daitou_user_id' not in columns:
        cursor.execute('ALTER TABLE platform_accounts ADD COLUMN daitou_user_id VARCHAR(50)')
        conn.commit()
        print("已添加 daitou_user_id 字段")
    
    conn.close()

问题5异步任务中的数据库Session

场景FastAPI后台任务中访问数据库

问题

  • 主请求的数据库Session在后台任务执行前可能已关闭
  • 使用已关闭的Session会导致"Session is closed"错误

解决方案

from contextlib import contextmanager

@contextmanager
def get_background_db():
    """为后台任务创建独立的数据库Session"""
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

def background_task(item_id: int):
    """后台任务必须创建自己的Session"""
    with get_background_db() as db:
        item = db.query(Item).filter(Item.id == item_id).first()
        # 处理业务逻辑
        item.status = "completed"
        db.commit()

问题6第三方SDK的API参数

场景调用第三方SDK时参数名称不匹配

问题

  • 逆向分析得到的接口文档可能不完整
  • 参数名称可能与预期不同(如title vs task_name
  • 部分参数是必填但文档未说明

解决方案

# 1. 编写小测试脚本验证SDK
async def test_sdk():
    sdk = ThirdPartySDK()
    await sdk.login(username, password)
    
    # 获取用户列表,检查返回字段
    users = await sdk.get_users()
    print("用户字段:", users[0].__dict__.keys() if users else "无用户")
    
    # 测试创建任务,逐个尝试参数
    try:
        result = await sdk.create_task(
            task_name="测试任务",  # 注意不是title
            video_url="https://xxx.mp4",
            user_ids=[123],
            # 其他必填参数...
        )
        print("创建成功:", result)
    except TypeError as e:
        print("参数错误:", e)  # 会提示缺少或多余的参数

# 2. 使用dataclass定义SDK返回结构
@dataclass
class SDKUser:
    id: int
    nickname: str
    avatar: str
    unique_id: str
    status: int
    user_type: str  # 注意不是platform_type
    # ... 根据实际返回添加

问题7Playwright的Headless模式

场景服务器环境下运行Playwright

问题

  • 服务器无图形界面必须用headless模式
  • 某些网站检测headless浏览器并拒绝访问
  • 调试时需要看到浏览器界面

解决方案

# conf.py
import os

# 根据环境自动切换
IS_SERVER = os.environ.get("IS_SERVER", "false").lower() == "true"
LOCAL_CHROME_HEADLESS = IS_SERVER  # 服务器True本地False

# 使用本地Chrome而非Chromium更不容易被检测
LOCAL_CHROME_PATH = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"  # macOS
# LOCAL_CHROME_PATH = "C:/Program Files/Google/Chrome/Application/chrome.exe"  # Windows

📦 推荐工具链2025-2026最佳实践

1. 多平台视频发布工具v3.0重点)

工具 方式 支持平台 安装
social-auto-upload Cookie+Playwright 抖音/快手/B站/小红书/视频号/TikTok git clone github.com/dreammis/social-auto-upload
matrix Cookie+Playwright 抖音/快手/视频号/小红书 git clone github.com/kebenxiaoming/matrix

2. 流量捕获工具

工具 用途 安装
mitmproxy 命令行代理捕获HTTPS流量 pip install mitmproxy
浏览器HAR导出 DevTools直接导出 内置

3. OpenAPI/SDK生成工具

工具 输入 输出 特点
mitmproxy2swagger mitmproxy流量/HAR OpenAPI 3.0 成熟稳定
openapi-python-client OpenAPI Python SDK 现代PythonPydantic
手写SDK 逆向分析 Python SDK 最灵活,适合复杂场景

4. 反检测工具

工具 方案 适用场景
playwright-stealth 基础反检测 普通网站
Botright 高级反检测+验证码 DataDome/Cloudflare

📖 完整工作流程

方式一Cookie直发模式推荐无需授权

适用于:想要直接发布视频到抖音/快手等平台,不想依赖第三方矩阵服务

# 1. 安装social-auto-upload
git clone https://github.com/dreammis/social-auto-upload.git
cd social-auto-upload
pip install -r requirements.txt
playwright install chromium

# 2. 获取Cookie首次需要扫码登录
python examples/get_douyin_cookie.py
# 扫码登录后Cookie自动保存到 cookies/douyin_uploader/account.json

# 3. 发布视频
python examples/upload_video_to_douyin.py

# 4. 集成到自己的系统
# 参考 social_publisher.py 的实现

集成示例

from social_publisher import publish_video_with_cookie

result = await publish_video_with_cookie(
    platform="douyin",
    video_path="/path/to/video.mp4",
    title="我的视频标题",
    cookies="从浏览器获取的Cookie字符串",
    tags=["标签1", "标签2"],
    description="视频描述"
)

if result["success"]:
    print("发布成功!")
else:
    print(f"发布失败: {result['error']}")

方式二第三方矩阵平台SDK封装

适用于:需要使用呆头鹅等第三方矩阵平台的功能

# 1. 分析目标平台(以呆头鹅为例)
# 打开浏览器DevTools登录平台记录所有API请求

# 2. 手写SDK推荐更可控
# 参考 daitou_sdk.py 的实现

SDK封装模板

import httpx
from dataclasses import dataclass
from typing import List, Optional, Dict, Any

@dataclass
class PlatformUser:
    """平台用户数据结构"""
    id: int
    nickname: str
    avatar: str
    unique_id: str
    status: int
    user_type: str

class PlatformSDK:
    """第三方平台SDK"""
    
    BASE_URL = "https://api.platform.com"
    
    def __init__(self):
        self.client = httpx.AsyncClient(timeout=30.0)
        self.token: Optional[str] = None
    
    async def login(self, username: str, password: str) -> bool:
        """登录获取Token"""
        resp = await self.client.post(
            f"{self.BASE_URL}/api/login",
            json={"username": username, "password": password}
        )
        data = resp.json()
        if data.get("code") == 0:
            self.token = data["data"]["token"]
            self.client.headers["Authorization"] = f"Bearer {self.token}"
            return True
        return False
    
    async def get_users(self) -> List[PlatformUser]:
        """获取授权账号列表"""
        resp = await self.client.get(f"{self.BASE_URL}/api/users")
        data = resp.json()
        return [PlatformUser(**u) for u in data.get("data", {}).get("list", [])]
    
    async def upload_video(self, file_path: str) -> Optional[str]:
        """上传视频到平台OSS返回公网URL"""
        # 1. 获取上传凭证
        resp = await self.client.post(f"{self.BASE_URL}/api/upload/token")
        upload_info = resp.json()["data"]
        
        # 2. 上传到OSS
        with open(file_path, "rb") as f:
            files = {"file": f}
            resp = await self.client.post(upload_info["upload_url"], files=files)
        
        # 3. 返回公网URL
        return resp.json().get("data", {}).get("url")
    
    async def create_task(
        self,
        task_name: str,  # 注意参数名
        video_url: str,
        user_ids: List[int],
        **kwargs
    ) -> Dict[str, Any]:
        """创建发布任务"""
        resp = await self.client.post(
            f"{self.BASE_URL}/api/task/create",
            json={
                "task_name": task_name,
                "video_url": video_url,
                "user_ids": user_ids,
                **kwargs
            }
        )
        return resp.json()
    
    async def close(self):
        """关闭连接"""
        await self.client.aclose()

方式三HAR转OpenAPI标准流程

适用于需要生成完整API文档的场景

# 1. 捕获流量
mitmproxy -w traffic.flow

# 2. 浏览器设置代理(localhost:8080),完成所有操作

# 3. 生成OpenAPI
mitmproxy2swagger -i traffic.flow -o api_spec.yaml -p https://api.example.com --examples

# 4. 生成Python SDK
openapi-python-client generate --path api_spec.yaml --output-path ./sdk

🔐 认证方式处理

认证方式优先级(实战总结)

1. Cookie直发最简单无需授权
   ↓ Cookie失效时
2. 第三方平台API需要用户授权
   ↓ 无第三方平台时
3. 官方API需要开发者资质

各平台认证方式

平台 Cookie直发 第三方矩阵 官方API
抖音 social-auto-upload 呆头鹅等 需资质
快手 social-auto-upload 呆头鹅等 开放API
B站 social-auto-upload 需资质
小红书 social-auto-upload 部分支持 不开放
视频号 social-auto-upload 呆头鹅等 需资质

Cookie有效期管理

# 发布后自动保存更新的Cookie
async def publish_with_auto_cookie_update(account, video, title):
    cookie_file = get_cookie_file(account)
    
    # 发布视频
    result = await do_publish(cookie_file, video, title)
    
    # 发布成功后Cookie可能已更新保存回数据库
    if result["success"]:
        with open(cookie_file, 'r') as f:
            updated_cookies = f.read()
        
        # 更新数据库中的Cookie
        account.cookies = updated_cookies
        account.cookie_updated_at = datetime.now()
        db.commit()
    
    return result

🛡️ 反检测最佳实践

Playwright Stealth配置实战优化版

from playwright.async_api import async_playwright
from playwright_stealth import stealth_async

async def create_stealth_browser(headless: bool = True):
    p = await async_playwright().start()
    
    # 使用本地Chrome更不容易被检测
    browser = await p.chromium.launch(
        headless=headless,
        executable_path="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
        args=[
            '--disable-blink-features=AutomationControlled',
            '--disable-dev-shm-usage',
            '--no-sandbox',
            '--disable-setuid-sandbox',
            '--disable-infobars',
            '--window-size=1920,1080',
        ]
    )
    
    context = await browser.new_context(
        viewport={'width': 1920, 'height': 1080},
        user_agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        locale='zh-CN',
        timezone_id='Asia/Shanghai',
    )
    
    page = await context.new_page()
    await stealth_async(page)
    
    return browser, context, page

反检测检查清单

  • 使用本地Chrome而非Chromium
  • 禁用AutomationControlled特征
  • 设置真实的User-Agent
  • 设置正确的时区和语言Asia/Shanghai, zh-CN
  • 使用1920x1080分辨率
  • 应用playwright-stealth补丁
  • 添加随机延迟3-8秒
  • 使用高质量代理住宅IP
  • 处理验证码(集成打码服务)

📁 完整文件结构

网站逆向分析/
├── SKILL.md                        # 技能说明文档(本文件)
├── requirements.txt                # Python依赖
├── scripts/
│   ├── site_analyzer.py            # 网站分析主程序
│   ├── sdk_generator.py            # SDK代码生成器
│   ├── docker_deploy.py            # Docker部署脚本
│   ├── login_helper.py             # 登录辅助工具
│   ├── quick_start.sh              # 快速启动脚本
│   ├── har_to_openapi.py           # HAR转OpenAPI
│   ├── stealth_browser.py          # 反检测浏览器
│   └── social_publisher.py         # [v3.0] 多平台发布器
├── references/
│   ├── 存客宝技术架构.md            # 参考:存客宝实现
│   ├── 常见网站登录方式.md          # 参考:各种认证方式
│   ├── GitHub开源工具对比.md        # 工具选型参考
│   ├── 反检测最佳实践.md            # 反爬虫对策
│   └── 实战踩坑记录.md              # [v3.0] 万推项目经验
├── templates/
│   ├── python_sdk/                 # Python SDK模板
│   ├── php_sdk/                    # PHP SDK模板
│   ├── fastapi_server/             # FastAPI服务模板
│   └── platform_sdk/               # [v3.0] 第三方平台SDK模板
└── output/                         # 生成的输出文件

⚠️ 常见错误及解决方案

错误码参考

错误码 含义 解决方案
cookie_invalid Cookie已失效 重新获取Cookie扫码登录
cookie_parse_failed Cookie格式错误 检查Cookie格式确保是有效的JSON或key=value格式
login_failed 第三方平台登录失败 检查账号密码是否正确
video_upload_failed 视频上传失败 检查视频文件是否存在、格式是否支持
task_create_failed 创建任务失败 检查参数是否正确、账号是否有发布权限
not_supported 平台不支持 该平台暂未接入,需要开发
no_auth 无授权信息 需要获取Cookie或完成平台授权

常见问题FAQ

Q: Cookie多久失效 A: 不同平台不同一般7-30天。建议每次发布后保存更新的Cookie。

Q: 能否完全自动化,不需要扫码? A: 首次必须扫码获取Cookie。之后可以用Cookie自动发布直到Cookie失效。

Q: 第三方矩阵平台和Cookie直发哪个好 A:

  • Cookie直发简单、免费、但Cookie会失效
  • 第三方平台:稳定、功能多、但需付费且受限于平台规则

Q: 服务器上怎么获取Cookie A:

  1. 本地获取Cookie后上传到服务器
  2. 使用VNC/远程桌面在服务器上扫码
  3. 使用无头浏览器+扫码截图+手机扫

Q: 视频发布失败但没有错误信息? A: 检查以下几点:

  1. 服务器日志中的详细错误
  2. 视频文件是否存在且可读
  3. 网络是否正常(能否访问目标平台)
  4. 账号是否有发布权限

📊 设计决策说明

为什么v3.0新增矩阵发布层?

需求 之前的方案 v3.0方案
发布视频到抖音 依赖第三方平台 Cookie直发无需第三方
多平台同时发布 逐个平台手动 统一接口,一键分发
账号管理 散落各处 集中管理,状态可见

为什么推荐Cookie直发而非官方API

对比项 官方API Cookie直发
申请门槛 需要企业资质 无门槛
功能限制 受API限制 功能完整
稳定性 稳定 网站改版可能失效
适用场景 大规模商业化 个人/小团队

为什么要手写SDK而非自动生成

  • 自动生成适合API文档完整的场景快速出原型
  • 手写SDK:适合需要精细控制的场景,如:
    • 接口文档不完整
    • 需要处理特殊逻辑(上传视频、分步任务)
    • 需要优化性能(连接池、重试策略)

🔗 相关资源