我们在调试时需要分析API请求的返回数据用来定位问题,这时候会需要使用抓包工具。
应用内抓包
App自己把收到的Response打印出来,方便我们检查数据或者用来创建Data Class,可以通过给okhttp Client设置拦截器来把数据打印出来。
1 | // stethoVersion = '1.5.1' |
配置代码
Stetho是Facebook开源的一个Android app调试工具,可以在Chrome上查看App网络数据和应用数据:
用logging-interceptor可以直接在logcat:
应用外抓HTTP/HTTPS
应用内抓包都需要依赖ADB,如果你是测试人员没有开发调试环境,或者运行的是正式版本App,又或者你想研究一下竞对App,这时你可能就会需要更强大的抓包工具了。Charles(青花瓷)和Fiddler是这类工具的代表,用法也比较类似,这里就说下Charles用法吧。
安装
官网直接选择对应系统下载安装
配置
现在其实已经可以抓Http请求了,不过现在基本都Https了,Charles通过配置证书是可以在手机上抓Https请求的。原理就是通过电脑和手机都安装Charles的根证书并且授信,这样Charles可以作为中间人对App充当Server,对Server充当Client,Charles对数据也就透明化了。
准备工作
安装的Charles电脑和要抓包的手机连接到同一个WIFI。运行Charles,打开Proxy->Proxy settings,设置下端口:
SSL Proxying添加一个设置:
手机代理设置
手机连上和电脑同一个WIFI,需要手动设一下代理,Android手机在已连接WIFI的高级设置把代理设为手动代理,填上电脑的IP地址,用ifconfig | grep inet查看,和上一步设置的端口号8888
安装根证书
电脑安装根证书,在Charles软件的help里点击SSL Proxying->Install Charles Certificate,然后在钥匙串里找到这个证书(可以搜索),双击,展开信任选项,选择始终信任:
手机安装根证书,同样在Help里选择Install mobile Certificate …按照提示操作就行了。
这样就可以查看HTTPS数据了:
应用外抓UDP
UDP包用Charles是不好抓的,着就需要用另外一个工具Wireshark,软件运行的界面需要选择一个要监听的网卡,然后用各种过滤条件来筛选要抓的包,这个工具用熟了对OSI参考模型也就很理解了。