client
core.client
API 客户端核心实现. 整合网络传输、鉴权与业务模块访问.
ClientConfig
typed-dict
ClientConfig(
*,
proxy: Any = ...,
trust_env: bool = ...,
verify: Any = ...,
cert: Any = ...,
event_hooks: Any = ...,
transport: Any = ...,
mounts: Any = ...,
)
Bases: TypedDict
支持透传的 httpx.AsyncClient 的配置项.
| PARAMETER | DESCRIPTION |
|---|---|
proxy
|
代理配置, 详见
TYPE:
|
trust_env
|
是否信任环境变量中的代理设置, 详见
TYPE:
|
verify
|
SSL 证书验证配置, 详见
TYPE:
|
cert
|
客户端证书配置, 详见
TYPE:
|
event_hooks
|
事件钩子配置, 详见
TYPE:
|
transport
|
自定义传输后端, 详见
TYPE:
|
mounts
|
自定义协议适配器, 详见
TYPE:
|
Client
Client(
credential: Credential | None = None,
device_path: str | Path | None = None,
*,
enable_sign: bool = False,
platform: Platform = ANDROID,
max_concurrency: int = 10,
max_connections: int = 20,
qimei_timeout: float = 1.5,
proxy: Any = ...,
trust_env: bool = ...,
verify: Any = ...,
cert: Any = ...,
event_hooks: Any = ...,
transport: Any = ...,
mounts: Any = ...,
)
QQMusic API Client.
管理底层 HTTP 请求、全局设备信息、QIMEI 以及鉴权凭证, 并提供对各个业务 API 模块的访问入口.
模块属性会在同一个 Client 实例内懒加载并复用, 以共享对应的模块状态.
支持自动携带签名字段、防并发积压限制及批量请求的打包调度.
初始化 Client 实例.
| PARAMETER | DESCRIPTION |
|---|---|
credential
|
用户鉴权凭证, 若不提供则创建空凭证.
TYPE:
|
device_path
|
单个设备信息文件路径. 若为 None, 则为当前 Client 在内存生成新设备;
TYPE:
|
enable_sign
|
是否开启全局请求参数签名.
TYPE:
|
platform
|
默认请求使用的平台标识, 默认为 "android".
TYPE:
|
max_concurrency
|
单个 Client 实例最大并发请求数.
TYPE:
|
max_connections
|
HTTP 连接池大小.
TYPE:
|
qimei_timeout
|
内部获取 QIMEI 接口的超时时间.
TYPE:
|
proxy
|
代理配置, 详见
TYPE:
|
trust_env
|
是否信任环境变量中的代理设置, 详见
TYPE:
|
verify
|
SSL 证书验证配置, 详见
TYPE:
|
cert
|
客户端证书配置, 详见
TYPE:
|
event_hooks
|
事件钩子配置, 详见
TYPE:
|
transport
|
自定义传输后端, 详见
TYPE:
|
mounts
|
自定义协议适配器, 详见
TYPE:
|
Source code in qqmusic_api/core/client.py
fetch
async
发送底层 HTTP 请求.
该方法提供并发控制、网络波动自动重试及网络异常转换.
| PARAMETER | DESCRIPTION |
|---|---|
method
|
HTTP 方法, 如 "GET" 或 "POST".
TYPE:
|
url
|
请求的 URL 地址.
TYPE:
|
**kwargs
|
传递给 httpx.AsyncClient.request 的附加参数.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Response
|
HTTP 响应对象. |
| RAISES | DESCRIPTION |
|---|---|
NetworkError
|
网络请求在重试耗尽后仍然失败. |
Source code in qqmusic_api/core/client.py
request_group
request_group(
batch_size: int = 20, max_inflight_batches: int = 5
) -> RequestGroup
创建并返回一个批量请求 (RequestGroup) 容器.
适用于需合并多个相同协议 (JSON 或 JCE) 请求的场景.
| PARAMETER | DESCRIPTION |
|---|---|
batch_size
|
单个批次的最大请求数量.
TYPE:
|
max_inflight_batches
|
允许同时发送的最多批次数量.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
RequestGroup
|
批量请求对象. |
Source code in qqmusic_api/core/client.py
execute
async
execute(request: Request[RequestResultT]) -> RequestResultT
执行单个请求描述符并解析返回结果.
调用中间件进行请求预处理, 随后根据请求格式 (JCE/JSON) 分发调用底层发包方法,
解析响应后自动组装成预期的 response_model 类型.
| PARAMETER | DESCRIPTION |
|---|---|
request
|
请求描述符对象.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Any
|
解析后对应的响应对象模型. |
| RAISES | DESCRIPTION |
|---|---|
ApiError
|
接口返回状态码异常或缺少预期字段. |
Source code in qqmusic_api/core/client.py
452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 | |
close
async
request
async
request(
method: str,
url: str,
credential: Credential | None = None,
platform: Platform | None = None,
**kwargs: Any,
) -> Response
发送带有凭证和 User-Agent 的 HTTP 请求.
自动装配指定的客户端平台 User-Agent 及对应凭证的 Cookies.
| PARAMETER | DESCRIPTION |
|---|---|
method
|
HTTP 方法, 如 "GET" 或 "POST".
TYPE:
|
url
|
请求的 URL 地址.
TYPE:
|
credential
|
覆盖默认凭证, 可选.
TYPE:
|
platform
|
覆盖默认平台, 可选.
TYPE:
|
**kwargs
|
传递给 httpx 的其他参数.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Response
|
HTTP 响应对象. |
Source code in qqmusic_api/core/client.py
request_musicu
async
request_musicu(
data: RequestItem | list[RequestItem],
comm: dict[str, Any] | None = None,
credential: Credential | None = None,
url: str = "https://u.y.qq.com/cgi-bin/musicu.fcg",
platform: Platform | None = None,
*,
preserve_bool: bool = False,
) -> dict[str, Any]
发送标准 QQ 音乐请求 (Musicu/JSON) 并解析响应.
| PARAMETER | DESCRIPTION |
|---|---|
data
|
请求项, 支持单个或批量.
TYPE:
|
comm
|
请求公共参数. |
credential
|
请求凭证 (该方法底层未直接使用凭证参数, 供扩展).
TYPE:
|
url
|
请求的网关 URL, 默认为 musicu.fcg.
TYPE:
|
platform
|
请求发起的平台名称.
TYPE:
|
preserve_bool
|
是否保留 JSON 参数中的布尔字面量.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
dict[str, Any]
|
解析后的 JSON 响应字典. |
| RAISES | DESCRIPTION |
|---|---|
HTTPError
|
HTTP 状态码不是 200. |
ApiError
|
JSON 解析错误或缺少关键字段. |
Source code in qqmusic_api/core/client.py
request_jce
async
request_jce(
data: RequestItem | list[RequestItem],
credential: Credential | None = None,
comm: dict[str, Any] | None = None,
url: str = "http://u.y.qq.com/cgi-bin/musicw.fcg",
) -> JceResponse
发送 Android 语义的 JCE 格式请求并解析响应.
| PARAMETER | DESCRIPTION |
|---|---|
data
|
JCE 请求项, 支持单个或批量.
TYPE:
|
comm
|
请求公共参数. |
credential
|
请求凭证.
TYPE:
|
url
|
JCE 网关 URL.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
JceResponse
|
解析后的 JCE 响应对象. |
| RAISES | DESCRIPTION |
|---|---|
HTTPError
|
HTTP 状态码不是 200. |
ApiError
|
JCE 解析失败. |