#NetConfig 配置类
源码: https://github.com/x-haose/hs-net/blob/main/examples/config/config.py
config.py
"""
NetConfig 配置类
使用 NetConfig 统一管理配置,支持配置继承和覆盖。
优先级:请求级参数 > 构造函数参数 > NetConfig
"""
from hs_net import EngineEnum, NetConfig, SyncNet
# ==================== 基本用法 ====================
def basic_config():
"""使用 NetConfig 统一管理配置。"""
config = NetConfig(
engine=EngineEnum.HTTPX,
base_url="https://example.com",
timeout=30.0,
retries=3,
retry_delay=1.0,
user_agent="chrome",
raise_status=True,
headers={"Accept-Language": "zh-CN"},
)
with SyncNet(config=config) as net:
resp = net.get("/") # 实际请求 https://example.com/
print(f"Config 示例: {resp.status_code}")
# ==================== 预设配置 ====================
def preset_config():
"""使用预设配置(适合团队统一配置)。
注意: curl_cffi 需要额外安装: pip install hs-net[curl]
"""
my_config = NetConfig(
engine=EngineEnum.CURL_CFFI,
base_url="https://example.com",
retries=5,
user_agent="chrome",
engine_options={"impersonate": "chrome120"},
)
with SyncNet(config=my_config) as net:
resp = net.get("/")
print(f"预设 Config: {resp.status_code}")
# ==================== 构造函数覆盖 ====================
def override_config():
"""构造函数参数优先于 config。"""
config = NetConfig(timeout=10.0, retries=5, user_agent="chrome")
# timeout 和 retries 被构造函数覆盖
with SyncNet(config=config, timeout=30.0, retries=1) as net:
resp = net.get("https://example.com")
print(f"参数覆盖: {resp.status_code}")
# ==================== 请求级覆盖 ====================
def request_override():
"""每次请求都可以覆盖全局配置。"""
with SyncNet(timeout=10.0, retries=0, user_agent="chrome") as net:
resp = net.get(
"https://example.com",
timeout=30.0,
user_agent="MyBot/2.0",
headers={"X-Custom": "per-request"},
)
print(f"请求级覆盖: {resp.status_code}")
if __name__ == "__main__":
print("=== 基本 Config ===")
basic_config()
print("\n=== 预设 Config ===")
preset_config()
print("\n=== 构造函数覆盖 ===")
override_config()
print("\n=== 请求级覆盖 ===")
request_override()
