简体中文 English 繁體中文 日本語 Русский
本文为静态镜像,内容以交互版为准 在交互式文档中心打开 →

ErisPulse.Core.client 模块


模块概述

ErisPulse HTTP/WS 客户端

基于 aiohttp 的统一 HTTP 和 WebSocket 客户端实现,提供完整的请求/响应/WS 抽象。 模块和适配器应优先使用此客户端发送 HTTP 请求和建立 WS 连接,而非自行导入 aiohttp。

底层 aiohttp 异常会在内部捕获并转换为 ErisPulse 异常体系, 确保业务代码不依赖任何特定 HTTP 库。

提示

  1. 使用 sdk.client 获取全局客户端单例
  2. 支持 get / post / put / delete / patch / request / ws_connect 等方法
  3. aiohttp 异常自动转换为 ErisPulse 异常 (ClientError 体系)
  4. 自动记录请求日志和统计信息

类列表

class HttpResponse(BaseHttpResponse)

HTTP 响应封装

提供与 aiohttp.ClientResponse 一致的访问接口。 自动读取并缓存响应体,避免重复读取。

提示 通过 .raw 属性可访问底层原生响应对象

示例:

>>> resp = await sdk.client.get("https://httpbin.org/get")
>>> print(resp.status)
>>> data = await resp.json()

方法列表

__init__(response)

status()

HTTP 状态码

返回值 (int): 状态码 (如 200, 404)


reason()

状态描述

返回值 (str): | None 状态原因短语


headers()

响应头

返回值 (object): 大小写不敏感的响应头映射


content_type()

Content-Type 值

返回值 (str): | None 内容类型


charset()

字符编码

返回值 (str): | None 编码名称


url()

响应 URL (可能因重定向而与请求 URL 不同)

返回值 (object): URL 对象


raw()

底层框架原生 Response 对象

返回值 (object): 原生响应实例 (当前为 aiohttp.ClientResponse)


async read()

读取响应体原始字节 (自动缓存)

返回值 (bytes): 响应体内容


class ClientWebSocket(BaseClientWebSocket)

客户端 WebSocket 连接 (基于 aiohttp)

封装 aiohttp.ClientWebSocketResponse,提供统一的 WebSocket 客户端接口。 通过 sdk.client.ws_connect() 获取实例。

提示

  1. 使用 iter_text/iter_bytes/iter_json 自动过滤消息类型
  2. 使用 receive/iter_messages 处理原始消息类型 (如 CLOSE/ERROR)
  3. 通过 .raw 属性可访问底层 aiohttp.ClientWebSocketResponse

示例:

>>> ws = await sdk.client.ws_connect("wss://example.com/ws")
>>> async for text in ws.iter_text():
...     await ws.send_text(f"Echo: {text}")

方法列表

__init__(ws)

closed()

连接是否已关闭

返回值 (bool): 是否已关闭


async send_text(data: str)

发送文本消息


async send_bytes(data: bytes)

发送二进制消息


async send_json(data: Any, mode: str = 'text')

发送 JSON 消息


_convert_ws_msg(msg)

转换 aiohttp WSMessage 为 ErisPulse WSMessage

内部方法


async receive()

接收原始消息

返回值 (WSMessage): 消息对象


async receive_text()

接收文本消息

返回值 (str): 文本内容 异常: WebSocketDisconnect - 连接断开时 异常: WebSocketError - 收到非文本消息时


async receive_bytes()

接收二进制消息

返回值 (bytes): 二进制内容 异常: WebSocketDisconnect - 连接断开时 异常: WebSocketError - 收到非二进制消息时


async receive_json(mode: str = 'text')

接收 JSON 消息


async close(code: int = WS_CLOSE_NORMAL, reason: str | None = None)

关闭 WebSocket 连接


class Client(BaseClient)

HTTP/WS 客户端 (基于 aiohttp)

提供统一的异步 HTTP 请求和 WebSocket 连接接口。 自动管理连接池和会话生命周期,底层 aiohttp 异常自动转换为 ErisPulse 异常。

提示

  1. 通过 sdk.client 获取全局单例,也可自行实例化
  2. 使用 get/post/put/delete/patch 快捷方法或通用 request 方法
  3. 使用 ws_connect 建立 WebSocket 连接
  4. 支持 ErisPulse 异常体系,业务代码不依赖 aiohttp
  5. 所有请求自动通过 lifecycle 发送事件,可用于监控

示例:

>>> resp = await sdk.client.get("https://httpbin.org/get")
>>> data = await resp.json()
>>>
>>> ws = await sdk.client.ws_connect("wss://example.com/ws")
>>> await ws.send_text("Hello")

方法列表

__init__()

_build_session_kwargs(timeout)

构建 aiohttp.ClientSession 参数,自动注入代理


_build_form_data(data: Any, files: dict[str, Any])

从 data 和 files 构建 multipart/form-data 请求体

异常: ValueError - data 为非 dict 类型且不为 None


async request(method: str, url: str)

发送 HTTP 请求

异常: ClientConnectionError - 连接失败 异常: ClientTimeoutError - 请求超时 异常: ClientError - 其他客户端错误

示例:

>>> resp = await client.request("GET", "https://httpbin.org/get", params={"q": "test"})

async ws_connect(url: str)

建立 WebSocket 连接

异常: ClientConnectionError - 连接失败 异常: ClientError - 其他客户端错误

示例:

>>> ws = await sdk.client.ws_connect("wss://example.com/ws", heartbeat=30)
>>> async for text in ws.iter_text():
...     await ws.send_text(f"Echo: {text}")

async get(url: str)

发送 GET 请求

示例:

>>> resp = await client.get("https://httpbin.org/get", params={"q": "test"})
>>> data = await resp.json()

async post(url: str)

发送 POST 请求

示例:

>>> resp = await client.post("https://httpbin.org/post", json={"key": "value"})

async put(url: str)

发送 PUT 请求


async delete(url: str)

发送 DELETE 请求


async patch(url: str)

发送 PATCH 请求


stats()

请求统计

返回值 (dict[str,): int] 统计数据 (total_requests, total_errors 等)


reset_stats()

重置统计数据