NiceLeeのBlog 用爱发电 bilibili~

Java 爬虫练习-bilibili视频下载 (四)

2019-01-24
nIceLee

阅读:


之前PC端Flv格式的视频下载基本上是搞定了,但登录的Cookies获取是个问题。
本文记录模拟登录的相关思考。

思路

登录方式(PC+Mobile Web)

  1. 账户密码 + 拖拽拼图
    先记下,看看还有没有别的方法。
    sources/archive/2019/01/24-login-tuozhuai.png

  2. 手机客户端扫码
    sources/archive/2019/01/24-login-saoma.png
    这个比1.要容易实现

  3. 其它账户授权
    sources/archive/2019/01/24-login-others.png
    这个就很坑了,相当于换个模拟登录的地方,再还加上附加工作,不做考虑

扫码登录原理

具体应该这样实现的:
浏览器访问登录页面,获取二维码,然后浏览器再周期性地请求看看是否手机已经扫码成功。

  • 周期性的链接很好获取,使用POST方法,
    链接为:
    https://passport.bilibili.com/qrcode/getLoginInfo
    Param为:
    sources/archive/2019/01/24-log-param-qrcode.png
    返回结果为:
    {"status":false,"data":-4,"message":"Can't scan~"}
    这里面关键是oauthKeygourl估计为登录之后要跳转的页面,关系不大

  • 如何获取二维码的路径呢?
    先等待当前二维码失效(毕竟一直往哔哩哔哩服务器查询浪费资源不是?)
    sources/archive/2019/01/24-login-qrcode.png
    点击刷新,果然马上有了请求:
    sources/archive/2019/01/24-login-getauthkey.png
    简单的一个链接,没有特殊构造: 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
    到这里,其实已经解决了。。。虽然绕了一大个弯

实现步骤整理

  1. 访问https://passport.bilibili.com/qrcode/getLoginUrl,获取oauthKey
  2. 根据oauthKey构造二维码图片
  3. 构造参数,周期性Post访问https://passport.bilibili.com/qrcode/getLoginInfo,直到扫码成功,保存Cookies

最后的最后

整个bibili av获取的过程至此已经基本结束了,中间走了很多弯路,满满都是泪

源代码


内容
隐藏