概述

CFspider 提供 Session 管理功能,可以在多个请求之间保持相同的代理配置、请求头和 Cookie,适合需要登录状态或连续请求的场景。

cfspider.Session

同步会话类,在多个请求之间保持代理配置、请求头和 Cookie。

类定义

python
class Session:
    def __init__(
        self,
        cf_proxies: str,
        token: str = None
    )
    
    def request(method, url, **kwargs) -> CFSpiderResponse
    def get(url, **kwargs) -> CFSpiderResponse
    def post(url, **kwargs) -> CFSpiderResponse
    def put(url, **kwargs) -> CFSpiderResponse
    def delete(url, **kwargs) -> CFSpiderResponse
    def head(url, **kwargs) -> CFSpiderResponse
    def options(url, **kwargs) -> CFSpiderResponse
    def patch(url, **kwargs) -> CFSpiderResponse
    def close()

初始化参数

参数 类型 默认值 说明
cf_proxies str 必填 Workers 代理地址,例如 "https://your-workers.dev"
token str None Workers API 鉴权 token。当 Workers 配置了 TOKEN 环境变量时必填

属性

属性 类型 说明
cf_proxies str Workers 代理地址
token str Workers API 鉴权 token
headers dict 会话级别的默认请求头字典,所有请求都会自动添加这些请求头
cookies dict 会话级别的 Cookie 字典,所有请求都会自动添加这些 Cookie

方法

Session 提供所有 HTTP 方法:get(), post(), put(), delete(), head(), options(), patch(),以及通用的 request() 方法。

使用示例

基本用法

python
import cfspider

# 创建会话
with cfspider.Session(cf_proxies="https://your-workers.dev", token="your-token") as session:
    # 设置会话级别的请求头
    session.headers['Authorization'] = 'Bearer token'
    session.headers['X-Custom-Header'] = 'value'
    
    # 所有请求都会使用相同的代理和请求头
    response1 = session.get("https://api.example.com/user")
    response2 = session.post("https://api.example.com/data", json={"key": "value"})
    
    # Cookie 会自动保持
    print(session.cookies)

登录场景

python
session = cfspider.Session(cf_proxies="https://your-workers.dev")

# 登录
login_response = session.post(
    "https://example.com/login",
    json={"username": "user", "password": "pass"}
)

# Cookie 自动保存
print(session.cookies)  # 包含登录后的 Cookie

# 后续请求自动携带 Cookie
profile = session.get("https://example.com/profile")
data = session.get("https://example.com/api/data")

session.close()

请求头优先级

python
session = cfspider.Session(cf_proxies="https://your-workers.dev")
session.headers['User-Agent'] = 'Session-Level-UA'

# 请求级别的请求头优先级更高
response = session.get(
    "https://example.com",
    headers={'User-Agent': 'Request-Level-UA'}  # 会覆盖会话级别的
)

cfspider.AsyncSession

异步会话类,用法与同步 Session 相同,但所有方法都是异步的。

使用示例

python
import asyncio
import cfspider

async def main():
    async with cfspider.AsyncSession(cf_proxies="https://your-workers.dev") as session:
        session.headers['Authorization'] = 'Bearer token'
        
        response1 = await session.get("https://api.example.com/user")
        response2 = await session.post("https://api.example.com/data", json={})

asyncio.run(main())

与 StealthSession 的区别

Session vs StealthSession
  • Session:仅保持代理配置和基本请求头,适合简单的会话管理
  • StealthSession:完整的隐身模式,包括浏览器指纹、Cookie 管理、自动 Referer、随机延迟、Sec-Fetch-* 更新,适合需要绕过反爬虫的场景

如果需要隐身模式的会话一致性,请使用 StealthSession