上周的培训课上,我给同学们讲解了手机抓包代理软件Charles and Fiddler等工具。同时在实际项目中设置获取快手APP热门。短视频下载链接为学习目标。
快手APP热门短视频下载链接的获取思路和方法有很多,但是同学们在这个过程中普遍遇到了以下困难:
1)Charles或Fiddler手机代理抓包工具无法解析手机上快手APP中的https,即代理中看到的快手https数据包未知或乱码。
2)有同学参考网上很多关于快手短视频的爬虫文章,但是因为没有系统的分析讲解快手视频下载链接的获取方法,加上随着快手APP技术升级,导致部分信息失效。所以,同样的事情也是徒劳的。
那么,如何获取快手APP热门短视频的下载链接?
第一步:首先我们要知道移动代理为什么抓包失败?
参考:为什么抓包代理软件解密一些APP的https包,而一些APP却是乱码
第2步:找到原因,如何避免ssl pinning抓包呢?
参考:如何使用抓包代理软件Charles或Fiddler抓包解密APP的https包
第三步:安装整体抓包环境并成功解析https包后,可以使用Charles或Fiddler配合Android模拟器获取视频下载链接。我们以查尔斯为例:
1)初步分析Charles抓到的快手包,在View - Focused Hosts中添加快手APP服务器的域名,从列表中区分其他主机的包. 快手APP服务器域名包括:api.ksapisrv.com、api.gifshow.com等5、6个域名。由于其他域名主要是图片服务器,或者日志服务器等,初步判断视频来自:api.ksapisrv.com。
2)通过手机APP操作,进一步观察分析发现快手的热门的视频是由下面的APP POST请求返回的。返回结果为 JSON。
具体链接形式:%28Android%29&lon=119.73903&country_code=CN&kpf=ANDROID_PHONE&extId=1b22ead02dc8b31&did=ANDROID_2556&kpn=KUAISHOU&net=WIFI&app=0&oc=MYAPP%2C1&ud=0&hotfix_ver=&c=MYAPPk32C1& @>0.1&appver=6.4.1.8151&ftt=&language=zh-cn&iuid=&lat= 55.652478&did_gt=15585905&ver=6.4&max_memory =192
除了上面的POST链接,还包含POST内容:
type=7&page=1&coldStart=false&count =20&pv=false&id=44&refreshTimes=2&pcursor=&source=1&needInterestTag=false&browseType=1&seid=f20dc8-1418-4424-a196&volume=0.73&client_key=3c2cddff5&os=android&sig=29cd3e039&sig=29cd3e039上面POST请求返回的JSON中main_mv_urls_h265的中值就是视频热门的下载链接。
本例中main_mv_urls_h265的链接提取为:
APP首页有很多热门视频,所以类似返回的JSON默认有20个链接。
3)至此,我们已经成功定位到快手热门短视频的下载链接。
注意:以上client_key和签名字符串由快手定义,因用户而异。因此,上述签名已作废。在实际项目中,请使用各自账户生成的client_key和签名字符串。