Skip to content

playlist_tracks 走 eapi 通道请求发送失败,Node 参考实现该端点为 weapi #2

Description

@jinzhongjia

现象

ApiClient::playlist_tracks(/api/playlist/manipulate/tracks)使用 CryptoType::default()(即 Eapi),
实际调用时请求在发送层即失败:

HTTP request failed: error sending request for url (https://interface.music.163.com/eapi/playlist/manipulate/tracks)

同环境下其他 eapi 端点(song_url_v1 / cloudsearch / likelist)均正常,失败特定于该端点;
目标域名用 curl 可达(HTTP 200),排除网络问题。

对照

Node 参考实现(NeteaseCloudMusicApi module/playlist_tracks.js)该端点走 weapi
(music.163.com/weapi/playlist/manipulate/tracks)。

另:playlist_track_add(/api/playlist/track/add,weapi)对用户自建歌单返回
code=401 无权限操作歌单,似乎并不适用于常规「收藏歌曲到歌单」场景。

绕行验证(可用)

用公开的底层 request() 手动以 weapi 调同一端点,真实登录态下成功(添加/重复添加均正常,
502 已存在被 SPECIAL_STATUS_CODES 特判为成功):

let data = json!({
    "op": "add",
    "pid": playlist_id,
    "trackIds": json!([song_id]).to_string(),
    "imme": "true",
});
let opt = RequestOption {
    crypto: CryptoType::Weapi,
    cookie: Some(cookie),
    ..Default::default()
};
client.request("/api/playlist/manipulate/tracks", data, opt).await

建议

playlist_tracks 的 crypto 由 CryptoType::default() 改为 CryptoType::Weapi,与 Node 实现对齐。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions