之前PC端Flv格式的视频下载基本上是搞定了,但登录的Cookies获取是个问题。
本文记录模拟登录的相关思考。
思路
登录方式(PC+Mobile Web)
-
账户密码 + 拖拽拼图
先记下,看看还有没有别的方法。
-
手机客户端扫码
这个比1.要容易实现 -
其它账户授权
这个就很坑了,相当于换个模拟登录的地方,再还加上附加工作,不做考虑
扫码登录原理
具体应该这样实现的:
浏览器访问登录页面,获取二维码,然后浏览器再周期性地请求看看是否手机已经扫码成功。
-
周期性的链接很好获取,使用POST方法,
链接为:
https://passport.bilibili.com/qrcode/getLoginInfo
Param为:
返回结果为:
{"status":false,"data":-4,"message":"Can't scan~"}
这里面关键是oauthKey
,gourl
估计为登录之后要跳转的页面,关系不大 - 如何获取二维码的路径呢?
先等待当前二维码失效(毕竟一直往哔哩哔哩服务器查询浪费资源不是?)
点击刷新,果然马上有了请求:
简单的一个链接,没有特殊构造:https://passport.bilibili.com/qrcode/getLoginUrl
返回也很好理解:{ "code":0, "status":true, "ts":1548307677, "data":{ "url":"https://passport.bilibili.com/qrcode/h5/login?oauthKey=b82d4e955abb1a50d8a1bb26db4b0625", "oauthKey":"b82d4e955abb1a50d8a1bb26db4b0625" } }
- 那么怎样生成二维码呢?
从后台看到的是一串Base64编码,没看见向服务器的请求。应该是js自动生成的。
那么js是根据什么内容生成的扫码图片呢?
先看一下二维码是啥内容,发现就是
https://passport.bilibili.com/qrcode/h5/login?oauthKey=b82d4e955abb1a50d8a1bb26db4b0625
到这里,其实已经解决了。。。虽然绕了一大个弯
实现步骤整理
- 访问
https://passport.bilibili.com/qrcode/getLoginUrl
,获取oauthKey
- 根据
oauthKey
构造二维码图片 - 构造参数,周期性Post访问
https://passport.bilibili.com/qrcode/getLoginInfo
,直到扫码成功,保存Cookies
最后的最后
整个bibili av获取的过程至此已经基本结束了,中间走了很多弯路,满满都是泪