-
Notifications
You must be signed in to change notification settings - Fork 534
自建解析服务器
LoveSy edited this page May 28, 2022
·
10 revisions
由于biliplus停止解析,哔哩漫游插件需要自定义解析服务器才可正常工作。解析服务器仅用于反代播放地址,因而无需高流量高带宽服务器。
以下是一些开源的服务端实现,比直接反代提供更多功能
- https://github.com/david082321/BiliRoaming-PHP-Server
- https://github.com/JasonKhew96/biliroaming-go-server
- 对于港澳台、中国大陆番剧,会从
/pgc/player/api/playurl
获取播放地址,反代上有应为api.bilibili.com
- 对于泰国、东南亚番剧,会从
/intl/gateway/v2/ogv/playurl
获取播放地址,反代域名应为api.global.bilibili.com
;从/intl/gateway/v2/app/subtitle
获取字幕,反代上游应为app.global.bilibili.com
(注意跟播放地址的上游不一样);从/intl/gateway/v2/app/search/type
获取搜索结果 - 解析服务器必须有域名(可以自己获取免费二级域名),并且必须使用https(可以使用acme.sh+80端口免费申请),以防止中间人攻击
- 不同区域可以用不同三级或以上域名区分,也可以检查URI中
area
参数,目前有的参数为:cn
中国大陆;hk
香港tw
台湾th
泰国、东南亚 - 如果你的ip使用量大,b站会暂时封禁该ip,这时候应该加入解析结果缓存、限制单个用户(检查access_key)请求次数等
- 漫游带有
http_x_from_biliroaming
的头,头内容会带上漫游版本,可以检查该头防止滥用,未来还能用于版本检查以解决可能会有的兼容问题 - 由于漫游使用轮询方式从不同区域服务器尝试请求播放地址,所以建议使用缓存
code=-10493
的请求,且不需要再刷新结果 - 如果请求量比较大,可以缓存播放地址,获取的地址最多有两个小时有效期,因此可以缓存一到两个小时,不过需要注意检查用户是否有权限获取播放地址(仅大会员或仅已付费)
用nginx反代实现,参考配置如下:
server
{
server_name bili.example.com; # 设置域名为bili.example
listen 443 ssl http2; # 务必使用https,如有需要也可以同时监听ipv6
client_max_body_size 128M;
location /pgc/player/api/playurl { # 只反向代理该路径的请求
proxy_pass https://api.bilibili.com; # 转发到b站服务器
if ($http_x_from_biliroaming ~ "^$") { # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断
return 403;
}
}
# RSA certificate
ssl_certificate /etc/nginx/ssl/example.com/full.pem; # 证书路径
ssl_certificate_key /etc/nginx/ssl/example.com/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
}
用nginx反代实现,参考配置如下(注意反代字幕接口不然没有字幕):
server
{
server_name bili.example.com; # 设置域名为bili.example
listen 443 ssl http2; # 务必使用https,如有需要也可以同时监听ipv6
client_max_body_size 128M;
location /intl/gateway/v2/ogv/playurl { # 只反向代理该路径的请求
proxy_pass https://api.global.bilibili.com; # 转发到b站服务器
if ($http_x_from_biliroaming ~ "^$") { # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断
return 403;
}
}
location /intl/gateway/v2/app/subtitle { # 还有字幕请求
proxy_pass https://app.global.bilibili.com; # 转发到b站服务器,注意跟播放地址上游不一样
if ($http_x_from_biliroaming ~ "^$") { # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断
return 403;
}
}
location /intl/gateway/v2/app/search/type { # 还有搜索请求
proxy_pass https://app.global.bilibili.com; # 转发到b站服务器,注意跟播放地址上游不一样
if ($http_x_from_biliroaming ~ "^$") { # 模块请求都会带上X-From-Biliroaming的请求头,为了防止被盗用,可以加上请求头判断
return 403;
}
}
# RSA certificate
ssl_certificate /etc/nginx/ssl/example.com/full.pem; # 证书路径
ssl_certificate_key /etc/nginx/ssl/example.com/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
}
目前有许多开源代理服务端,实现了缓存、黑白名单、区域检查等功能,可以自行寻找使用。
B 站的 API 请求都有一个 sign
字段,就是把请求参数按 key 的字典序排序,加上 appKey 和 secretKey 之后算一个 MD5。这里提供 appKey 和 secretKey:
client | appKey | secretKey | 说明 |
---|---|---|---|
android | 1d8b6e7d45233436 | 560c52ccd288fed045859ed18bffd973 | 粉版 |
android_i | bb3101000e232e27 | 36efcfed79309338ced0380abd824ac1 | play版 |
android_b | 07da50c9a0bf829f | 25bdede4e1581c836cab73a48790ca6e | 概念版 |
android_tv | 4409e2ce8ffd12b8 | 59b43e04ad6965f34319062b478f83dd | 电视版 |
biliLink | 37207f2beaebf8d7 | e988e794d4d4b6dd43bc0e89d6e90c43 | |
android_bilithings | 8d23902c1688a798 | 710f0212e62bd499b8d3ac6e1db9302a | |
bstar_a | 7d089525d3611b1c | acd495b248ec528c2eed1e862d393126 | 东南亚版 |
android_mall_ticket | 4c6e1021617d40d9 | e559a59044eb2701b7a8628c86aa12ae | |
bili_scan | 9a75abf7de2d8947 | 35ca1c82be6c2c242ecc04d88c735f31 | |
ai4c_creator_android | 9d5889cf67e615cd | 8fd9bb32efea8cef801fd895bef2713d | |
android_ott_sdk | c034e8b74130a886 | e4e8966b1e71847dc4a3830f2d078523 | |
android_hd | dfca71928277209b | b5475a8825547a4fc26c7d518eaaa02e | HD版 |
angu_android | 50e1328c6a1075a1 | 4d35e3dea073433cd24dd14b503d242e |