msojocs / bilibili-linux

基于哔哩哔哩官方客户端移植的Linux版本 支持漫游
MIT License
698 stars 34 forks source link

漫游港澳台番剧功能失效 #91

Closed cxw620 closed 9 months ago

cxw620 commented 9 months ago

由于 https://passport.bilibili.com/login/app/third?appkey=27eb53fc9058f8c3&api=https%3A%2F%2Fwww.mcbbs.net%2Ftemplate%2Fmcbbs%2Fimage%2Fspecial_photo_bg.png&sign=04224646d1fea004e79606d3b038c84a 已经失效, 导致无法获取 access_key, 漫游港澳台番剧功能可能失效.

代码逻辑位于: https://github.com/msojocs/bilibili-linux/blob/master/extensions/area_unlimit/hook/common.js#L231

msojocs commented 9 months ago

确实失效了

cxw620 commented 9 months ago

有什么想法怎么修吗? 直接传 Cookie 还是模拟手机客户端.

msojocs commented 9 months ago

传cookie不起作用,取不到1080p的格式

似乎只能做一次额外的登录了

cxw620 commented 9 months ago

因为当前没有漫游服务器支持 Cookie 登陆, Go 端 和 PHP 端的维护者似乎目前也没有意愿适配, Rust 端我参与维护但是没啥时间改, 积重难返属于是能用就不动, 而且需求不大, 多数还是用漫游模块的.

看看还有没有人提这问题吧, 我的建议是没有什么人提就暂且搁置掉, 先更新文案提示功能失效.

最好还是用 access_key, 模拟 APP 登陆, 服务端处理两套截然不同的身份验证比较麻烦, 要在服务端适配几乎等于重写(虽然我确实在重写, 但是还是只对 APP 来, 走 gRPC 的接口...).

msojocs commented 9 months ago

我没有使用漫游服务器,我使用api.bilibili.com以及vpn服务。

cookie并没有起到实质性作用。

我不确定你是否试过。

cxw620 commented 9 months ago

api.bilibili.com/pgc/player/api/playurl 这个 API 我没记错的话本来就是旧版 APP 用的, Cookie 验证没用很正常. 而且这个 API 估计也活不久, 毕竟 6.40 左右就已经改成 gRPC 拿 playurl 了.

msojocs commented 9 months ago

看你这么说,我换了 x/player/playurl 试了一下,cookie能取到1080P.(没用漫游服务器) 那 pgc 估计快废弃了

msojocs commented 9 months ago

哦,PHP,GO,RUST的漫游都不支持这个接口

msojocs commented 9 months ago

试了下云视听的access_token, 不使用漫游服务器能取到1080p。

但是,漫游服务器不承认云视听的access_key,提示未登录。

云视听是可以扫码登录,免去账号密码的输入。

否则,就得用密码或短信验证码,不太好。

cxw620 commented 9 months ago

因为漫游用的是 APP 端的登陆验证 API, 应该只有 Rust 端曾经有适配云视听, 但后面因为上一次 -663 问题给 deprecate 了. 而且云视听和哔哩哔哩理论上是两个东西, 会员不互通(理论上, 我没用过), API 也不一样, 也没有设备能装上云视听抓包分析.

看看还有什么 APP 是扫码登陆的, 或者如何通过 Cookie 拿 access_key...

cxw620 commented 9 months ago

用这个接口如何, 刚刚抓包确定 Bilibili HD 版本也是用的这个 https://github.com/SocialSisterYi/bilibili-API-collect/blob/2d86a3cc7c9598f1e05f13acfd5780f64ace7bd9/docs/login/login_action/QR.md?plain=1#L492

参考请求 param

appkey: dfca71928277209b
build: 1442100
channel: master
device: phone
mobi_app: android_hd
platform: android

具体请求参数如下 UA: Mozilla/5.0 BiliDroid/1.44.2 (bbcallen@gmail.com)

POST Form 各参数分析 key 示例 备注
appkey dfca71928277209b
auth_code *** 来自/x/passport-tv-login/qrcode/auth_code
bili_local_id *** 参考设备指纹 fp (fp_local, fp_remote)
build 1442100 版本号
buvid *** XU-Prefix BUVID, 参考设备唯一标识 BUVID
c_locale zh-Hans_CN
channel master
code 留空
device phone
device_id *** 参考设备指纹 fp (fp_local, fp_remote)
device_name HUAWEIWGR-W09 设备 model
device_platform Android12HUAWEIWGR-W09 ?
device_tourist_id *** 请求 /x/passport-user/guest/reg 获取
disable_rcmd 0
dt *** 签名? 算法未知
extend 留空  
local_id *** XU-Prefix BUVID, 参考设备唯一标识 BUVID
login_session_id *** 算法未知
mobi_app android_hd
platform android
s_locale zh-Hans_CN
spm_id from_spmid
statistics {"appId":5,"platform":3,"version":"1.44.2","abtest":""}
ts 1698601768
sign *** APP 端 API 通行的签名算法, 参考APP API 签名与鉴权

拿到 access_key 后, 请求漫游服务器的时候 appkey 也要是 dfca71928277209b, 而且走 app 的那个接口而不是 /pgc/player/web/playurl 了.

msojocs commented 9 months ago

我下了HD试了一下,hd的access_key可以用于/pgc/player/api/playurl

那就用hd扫码获取access_key了。

2`19UE3_D@4 9G)71 (G`1

msojocs commented 9 months ago

因为漫游用的是 APP 端的登陆验证 API, 应该只有 Rust 端曾经有适配云视听, 但后面因为上一次 -663 问题给 deprecate 了. 而且云视听和哔哩哔哩理论上是两个东西, 会员不互通(理论上, 我没用过), API 也不一样, 也没有设备能装上云视听抓包分析.

看看还有什么 APP 是扫码登陆的, 或者如何通过 Cookie 拿 access_key...

云视听官网是有安装包的,能安装使用。

image