手机抓包是一名测试工程师常备的技能,比如我想查看一个接口请求的参数、返回值,还有移动设备上的http请求、https请求,这一次的背景是我们想要在app端和小程序端抓取一些视频,这里用腾讯视频作为例子,使用mac系统的Charles软件(有点类似win系统中的fiddler,使用方式上大同小异)来进行视频接口与地址的抓包和嗅探。
同时抓包工具也有利于线上生产环境问题的分析,前几天有个做服务端的同学跟我说他不用抓包工具,遇到问题直接debug代码,那我问他,如果线上服务的话,你怎么调?在实际项目中,没有遇到跟客户端相互扯皮的事情吗?客户端说他没问题,服务端也说他没问题,到底谁有问题?这时候没必要相互推脱,拿数据出来说话才是王道。抓包工具做了什么?它把客户端的请求数据,以及服务端返回的数据完完整整的抓取下来,供攻城狮分析问题。所以首先分析问题才是最重要的,而不是一上来就跟踪代码debug
Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request, response和HTTP headers (包含cookies与caching信息)
首先安装Charles,直接去官网下载即可https://www.charlesproxy.com/latest-release/download.do 最新版本号是4.5.1,值得一提的是Charles也支持64位的win系统
安装好后,打开Charles,在菜单中打开代理
这样,Charles就在本地直接起了一个代理服务,默认端口号是8888
此时打开命令行,输入ifconfig(win下输入ipconfig),查看本机的局域网ip地址
将你的手机和电脑连入到统一局域网内,然后设置wifi连接的高级设置,将刚刚的本机ip地址和端口号填入到代理设置内
这时,手机端的一切网络请求就都可以在电脑端的Charles界面中展示出来了
在手机端打开腾讯视频app或者腾讯视频小程序,随便点开一个视频
我们看到包括视频地址的一切请求都一览无遗,将地址复制到浏览器中查看
这样我们就获取了手机端播放的视频,随后我们直接可以通过命令或者写python脚本下载到本地,这里我们使用linux命令wget
wget http://ugcws.video.gtimg.com/uwMROfz2r5zEYaQXGdGnC2dfDmZ8QagOBRrURGecmSBtB5p6/u0851ed5e06.mp4?vkey=2F247F5C2A6500312D6F6B52E65F53DC4770569E7A9710825CEA1DC8A0E99927E68B68C5C83D12E503C70DB9FDE136B95AD4FBA7C169FF1E334F8584173754F9E76E83D5A5A4E4D5CA182AA0E0C478B59C2AEAFBEEFF14CB2531CF18881741B1CEA42BACB9150D485459FA19B14D194D85A3EE1F34E61433
视频已经下载到了本地,可以随时播放
需要注意的点:
1、当我们不抓包的时候,会将Charles关闭,这时候你的手机是访问不到网络的,因为设置了代理(就是Charles),这时候需要将Android手机中的代理关闭,这个是抓包时经常犯的错。
2、Charles抓取,必须保持电脑端和手机端连接的wifi,是在同一个网络环境下。