解析原理

模拟浏览器访问,请求获取HTML文本或者请求接口获取视频信息,不同站点解析逻辑不同。

Node端解析流程:image.png

解析技巧

常用工具

Fiddler

一个很强大的抓包工具,可惜没有Mac版本(可以用一些骚操作在Mac运行,但是兼容性很差)
用途:
1.抓包,可以抓取HTTP的包,并分析。
2.重放,抓到包后,可以无差别重新发送请求,当然也可以改变个别参数再请求,对接口参数的分析很有用。
3.代理,可以作为代理服务器提供代理,手机连接后可以抓取app发送的包。
4.发送请求,可以快速构造请求并发送(对于Get请求,构造请求比postman快了不止一点半点),然后分析。

Charles

charles是Mac下的HTTP代理软件,与Fiddler类似的功能,它不但能抓http的包,还能抓https的包。

Postman

在不能使用Fiddler的情况下只能使用postman代替,但是也只能发送请求,不能抓包,相对Fiddler来说弱了太多。

浏览器开发者工具

浏览器开发工具(F12)也是一个很强大的工具,而且是不得不用的工具,这里简单介绍一下浏览器开发工具的使用技巧:

1.搜索

在开发者工具中,有很多可以搜索的地方:
1.文件内搜索:打开某个html文件或js文件,按ctrl+f,即可开启搜索
2.请求过滤和搜索
过滤:
image.png
搜索:
image.png
点击搜索按钮,出现搜索界面,可以在请求到的内容里快速的找到你要的信息,这样就能很快的找到视频地址
来自哪个接口了
image.png
找接口后,可以找到接口是在哪个js文件调用发出的:
image.png
js文件:
image.png
如果看到代码时压缩的,可以点击“{}”按钮格式化代码:
image.png

2.调试

在找到接口请求在哪里发出以后,我们需要经调试,找出接口参数是怎么来的,在文件左边行数显示里打个断点,然后刷新页面,出现如下页面:
image.png
在调试页面,可以看到当前函数里的变量的值,和函数调用栈,鼠标放在调用的函数上,还能进入到对应的函数里面。通过调试,可以一步一步的查看参数的生成,从而能得到参数的构造方法。

解析类型

从解析难度和技巧上,可以分成以下几种类型:

简单类型

  • 难度指数:★
  • 特点:通过服务端渲染HTML,会直接把视频地址直接放在HTML文件里,有些甚至会把video标签也渲染出来,一般的小平台视频APP分享页都是这种类型。
  • 解析方式:请求到HTML文件,解析HTML文件就可以了。
  • 站点例子:m.v.baidu.com,news.cri.cn

简单接口请求

  • 难度指数:★★
  • 特点:这种类型一般是在SPA站点里比较常见,他们不会把视频信息直接写在HTML文件里,而是通过一次异步请求去获取视频信息,这个接口比较简单,参数一般只有视频id是动态的。
  • 解析方式:只需要解析出视频id(一般是在Url里或者HTML页面里),然后请求接口就可以拿到视频信息。
  • 站点例子:mobile.rr.tv

接口加盐类型

  • 难度指数:★★★~★★★★★
  • 特点:这种类型在“简单接口请求”类型上,变得不简单,他也是通过接口来获取视频地址,但是请求接口的时候,带上的参数变得复杂,除了必要的视频id,还需要一些动态的鉴权信息。
  • 解析方式:动态鉴权信息来源一般有两种,一种是前端js通过对其他参数和信息计算得出,另一种是通过接口(这个接口一般不需要鉴权)请求得到。每个站点都有自己的加密逻辑和算法,所以能否找出加密算法,是决定能否解析出视频的关键,也是解析的难点。简单的站点(如好兔视频H5分享页)可能稍微调试一下就能找到加密逻辑,而复杂的站点,可能要找到眼花了T_T(如B站的番剧加密)
  • 站点例子:iqiyi.com,B站,兔视频H5分享页

数据加密类型或打乱类型

  • 难度指数:★★★
  • 特点:返回到前端的数据不是以明文形式出现,或者内容比较分散,不能直接看出是否是视频信息,需要前端解密或者拼凑之后才能得到完整信息。
  • 解析方式:这种类型难点是不知道视频信息时从哪里来的,因为无法直接看到明文形式的视频信息,所以需要调试或者细心查找才能知道视频信息的来源,总之就是细心加耐心了。
  • 站点例子:coub.com(视频信息加密),qq.com(视频信息打乱)

Cookie验证类型

  • 难度指数:★★★~★★★★★
  • 特点:cookie验证类型,即在访问页面或者接口的时候,需要带上cookie才能访问到正确的信息。这种类型可以细分为两种,我把他叫做静态cookie和动态cookie。

静态cookie,在访问的时候,只需要带上cookie就可,服务端并不会验证这个cookie是否过期。
动态cookie,cookie有时间限制,一般几个小时后就会失效,或者是同一个cookie请求次数过多就会失效。

  • 解析方式:对于静态cookie,我们可以写死一个cookie,每次请求的是带上就可以了,对于动态cookie,需要维护cookie的过期时间,一般是先动态的获取到cookie,然后保存起来,等过期后再次获取。动态获取cookie需要分析接口的cookie是怎么生成的,一般是第一次访问页面的时候,通过response的set-cookie头部返回的。
  • 站点例子:mgtv.com(静态cookie),weibo.com(静态cookie)kuaishou.com(动态cookie)

Flash型

  • 难度指数:★★★~★★★★
  • 特点:使用flash播放器的站点,会在网页上请求一个.swf文件,这个文件就是flash播放器,一般使用actionscript语言开发,而且在网页上看不到里面的代码,就像一个黑盒子。一般情况下,flash播放器使用的视频地址都是由网页传接口和参数进flash播放器里面,然后播放器请求接口获取到的,flash播放器只管请求接口获取视频地址,然后播放视频。但是有些flash播放器还会参与接口鉴权加密的工作,传进flash播放器的接口不是完整,flash播放器会对其加工,生产鉴权参数后才发出请求,获取视频地址。
  • 解析方式: 对于一般的情况,和普通的站点解析没有什么区别,只需要找到视频地址来源接口就可以了。对于会在flash播放器里面生产鉴权参数的情况,则需要反编译flash播放器,在flash播放器的代码里面找到计算鉴权参数的方法。
  • 站点例子:cctv.com(一般类型),1905.com(特殊类型,需要需要反编译播放器)

损人不利己型

  • 难度指数: ★★★~★★★★★
  • 特点:有些站点,为了防爬取,做了一些比较极端的防爬取策略。比如秒拍视频,用户第一次访问它的视频分享页面的时候,需要验证滑动验证码,验证通过之后才能看视频。又如快手,用户第一次访问它的视频分享页面,根本就不给你播放视频,直接显示视频不存在。这些对用户体验都及其不友好,所以说是损人不利己。
  • 解析方式:这些站点在访问第二次的时候,是可以正常播放的。原因是第一次访问的时候没有带cookie,或者cookie失效,访问不到正确页面,但是可以设置cookie,第二次来访问的时候就带上正常cookie。就可以访问到正确页面了。所以这种类型可以说是动态cookie类型,需要解析的时候动态生成cookie。对于滑动验证码类型,自己动态生成cookie比较困难,这种类型可以使用服务端渲染解析来破解,在服务端模拟用户滑动验证从而通过验证。
  • 站点例子:miaopai.com(滑动验证码),kuaishou.com(第一次访问视频不存在)

IP封禁类型

  • 难度指数:★★★
  • 特点:一般大平台的防盗策略都做得比较好,他们能识别到大量的请求来自同一个ip,然后对这个ip进行封禁,导致这个ip不能访问,或者给这个ip返回错误内容(这个最坑)。
  • 解析方式:对于ip被封禁,一般的解决办法是通过代理或者二次解析的方式来解决。
  • 站点例子:toutiao.com,bilibili.com,iqiyi.com

综合类型

  • 难度指数:★★★★★
  • 特点:以上提到的类型都有所应用,整个解析过程繁琐复杂。
  • 解析方式:调试 + 耐心。

未完待续~~