3Shain / Comen

📺直播用弹幕栏【原bilichat】

Home Page:https://comen.app

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[本地部署版]访问B站API过于频繁导致被暂时封禁

3Shain opened this issue · comments

考虑加入缓存

commented

本地部署也会出现这种问题吗?

本地部署也会出现这种问题吗?

目前仅本地部署会有此问题
解决方案是使用更完善的带有缓存的后端,目前公共服务器是把/api路径反向代理到专用的缓存后端以解决海量请求

commented

本地部署也会出现这种问题吗?

目前仅本地部署会有此问题
解决方案是使用更完善的带有缓存的后端,目前公共服务器是把/api路径反向代理到专用的缓存后端以解决海量请求

如果是按照 #16 的方法,只需要缓存一个face链接的话,那就不需要用什么特别专用的缓存后端,仅仅用Nodejs内部自带的缓存就能解决了吧,(看到了你的BiliChat.CacheServer)这个方法应该也可以在浏览器上也部署一个。

本地部署也会出现这种问题吗?

目前仅本地部署会有此问题
解决方案是使用更完善的带有缓存的后端,目前公共服务器是把/api路径反向代理到专用的缓存后端以解决海量请求

如果是按照 #16 的方法,只需要缓存一个face链接的话,那就不需要用什么特别专用的缓存后端,仅仅用Nodejs内部自带的缓存就能解决了吧,(看到了你的BiliChat.CacheServer)这个方法应该也可以在浏览器上也部署一个。

浏览器最终所有http请求都是要走xhr的,所以肯定是逃不过跨域限制和referer检查的。

commented

本地部署也会出现这种问题吗?

目前仅本地部署会有此问题
解决方案是使用更完善的带有缓存的后端,目前公共服务器是把/api路径反向代理到专用的缓存后端以解决海量请求

如果是按照 #16 的方法,只需要缓存一个face链接的话,那就不需要用什么特别专用的缓存后端,仅仅用Nodejs内部自带的缓存就能解决了吧,(看到了你的BiliChat.CacheServer)这个方法应该也可以在浏览器上也部署一个。

浏览器最终所有http请求都是要走xhr的,所以肯定是逃不过跨域限制和referer检查的。

这也不完全对,加上了<meta name="referrer" content="no-referrer">,图片就不会有Referrer,参见http://vtbs.moe,所以可以跳过在服务器下载头像这一步,只返回一个头像链接

本地部署也会出现这种问题吗?

目前仅本地部署会有此问题
解决方案是使用更完善的带有缓存的后端,目前公共服务器是把/api路径反向代理到专用的缓存后端以解决海量请求

如果是按照 #16 的方法,只需要缓存一个face链接的话,那就不需要用什么特别专用的缓存后端,仅仅用Nodejs内部自带的缓存就能解决了吧,(看到了你的BiliChat.CacheServer)这个方法应该也可以在浏览器上也部署一个。

浏览器最终所有http请求都是要走xhr的,所以肯定是逃不过跨域限制和referer检查的。

这也不完全对,加上了<meta name="referrer" content="no-referrer">,图片就不会有Referrer,参见http://vtbs.moe,所以可以跳过在服务器下载头像这一步,只返回一个头像链接

这方法不错。

commented

虽然有cache control,但是我认为还是给后端加上一个lru-cache比较好。
这样如果有多个用户同时查看一个直播间也不会导致重复访问api。

commented

我刚刚测试了一下暂时封禁,希望能帮到你→_→(我刚刚本地调试biliChat就被封了。。。
应该是15分钟解封(~10:12-10:27),不知道多次被封会不会不一样
间隔170毫秒不会被封,
间隔160毫秒就会被封
(持续5分钟

测试用代码:

const got = require('got')
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));

(async () => {
  for (;;) {
    got('https://api.bilibili.com/x/space/acc/info?mid=349991143', { json: true })
      .then(({ body }) => console.log(body.data.name))
    await wait(170)
    console.log('ok')
    // 170ms ok
    // 160ms 403
  }
})()

猜测rate limit是一秒6请求
不知道有没有burst limit