NetConfig

全局配置类,基于 Python dataclass(frozen=True)

定义

@dataclass(frozen=True)
class NetConfig:
    engine: str | EngineEnum = EngineEnum.HTTPX
    base_url: str = ""
    timeout: float = 20.0
    retries: int = 3
    retry_delay: float = 0.0
    user_agent: str = "random"
    proxy: str | ProxyService | None = None
    verify: bool = False
    raise_status: bool = True
    allow_redirects: bool = True
    rate_limit: int | float | RateLimitConfig | None = None
    concurrency: int | None = None
    headers: dict[str, Any] = field(default_factory=dict)
    cookies: dict[str, Any] = field(default_factory=dict)
    engine_options: dict[str, Any] = field(default_factory=dict)

字段说明

字段类型默认值说明
enginestr | EngineEnumEngineEnum.HTTPXHTTP 引擎标识
base_urlstr""基础 URL,自动与路径拼接
timeoutfloat20.0请求超时时间(秒)
retriesint3失败重试次数
retry_delayfloat0.0重试间隔(秒),0 为立即重试
user_agentstr"random"UA 配置,支持快捷方式
proxystr | ProxyService | NoneNone代理配置,支持字符串或 ProxyService
verifyboolFalse是否验证 SSL 证书
raise_statusboolTrue非 2xx 是否抛出异常
allow_redirectsboolTrue是否自动重定向
rate_limitint | float | RateLimitConfig | NoneNone速率限制,int/float 表示每秒请求数
concurrencyint | NoneNone最大并发数(None 不限制)
headersdict{}全局默认请求头
cookiesdict{}全局默认 cookies
engine_optionsdict{}引擎特定配置,透传给引擎

User-Agent 快捷方式

说明
"random"每次请求随机生成
"chrome"Chrome 浏览器 UA
"firefox" / "ff"Firefox 浏览器 UA
"safari"Safari 浏览器 UA
"edge"Edge 浏览器 UA
其他字符串原样使用

EngineEnum

class EngineEnum(StrEnum):
    HTTPX = "httpx"
    AIOHTTP = "aiohttp"
    REQUESTS = "requests"
    CURL_CFFI = "curl_cffi"
    REQUESTS_GO = "requests_go"

RateLimitConfig

速率限制配置,基于 dataclass(frozen=True)

@dataclass(frozen=True)
class RateLimitConfig:
    rate: int = 0                  # 时间窗口内允许的请求数
    duration: int = 1000           # 时间窗口(毫秒),默认 1 秒
    per_domain: dict = field(...)  # 域名级别覆盖,值为 int/float 或 RateLimitConfig
    backend: Any = None            # 自定义桶实例(如 RedisBucket)

RequestModel

请求模型,封装单次 HTTP 请求的所有参数(dataclass):

@dataclass
class RequestModel:
    url: str
    method: str = "GET"
    url_params: dict | None = None
    form_data: dict | list | str | bytes | None = None
    json_data: dict | None = None
    files: dict | list | None = None
    raise_status: bool = True
    allow_redirects: bool = True
    verify: bool = True
    user_agent: str | None = None
    headers: dict = field(default_factory=dict)
    cookies: dict = field(default_factory=dict)
    timeout: float | None = None
    retries: int | None = None
    retry_delay: float | None = None
Tip

RequestModel 通常由框架内部构建,用户一般不需要直接创建。 在信号中间件的 on_request_before 回调中可以访问和修改它。