Charles抓取https请求及常见问题解决

大家好,我是杨叔。每天进步一点点,关注我的微信公众号【程序员杨叔】,获取更多测试开发技术知识!

一、背景

APP测试的时候,通常都需要通过抓包工具抓取各类请求,查看接口的入参、返回值等,用于分析定位问题。常用的抓包工具有fiddler、charles等,抓取http的请求比较简单,https的请求稍显复杂。由于杨叔更喜欢charles的页面风格,本篇文章主要介绍以下两点:
1、Charles如何抓取电脑端和手机端的https请求;
2、安卓手机无法抓取app https请求的原因和解决方案;

二、Charles如何抓取https请求

Charles抓取http请求非常简单,安装好软件后打开记录按钮即可抓取。抓取https请求相对复杂一些,需要一些配置和安装证书。

2.1 Charles https配置

1、菜单栏点击代理》代理设置

Charles抓取https请求及常见问题解决_第1张图片
设置代理的端口号,比如设置为:8888,这个端口号后面手机端连接时需要用到:
Charles抓取https请求及常见问题解决_第2张图片
2、菜单栏点击代理》SSL代理设置

Charles抓取https请求及常见问题解决_第3张图片
勾选启用SSL代理,添加主机和端口都为*:
Charles抓取https请求及常见问题解决_第4张图片

2.2 Charles PC端证书安装

1、PC端证书安装:
菜单栏点击“帮助”》SSL代理》安装charles根证书:
Charles抓取https请求及常见问题解决_第5张图片
根据步骤一步步往下走:

Charles抓取https请求及常见问题解决_第6张图片
Charles抓取https请求及常见问题解决_第7张图片
安装完成后,记得去电脑的网络和Internet中设置本地使用代理为Charles开启的代理服务器:
Charles抓取https请求及常见问题解决_第8张图片

踩坑注意
地址这里要设置:http=127.0.0.1:8080;https=127.0.0.1:8080,不要分开设置前面地址填127.0.0.1,后面端口填:8080,试了这种填法只能抓http请求,无法抓https请求。就直接在地址里面填:http=127.0.0.1:8080;https=127.0.0.1:8080,这样http和https的请求都能抓到。

完成以上步骤,PC端https请求即可正常抓包。

2.3 Charles 手机端证书安装

1、手机端证书安装:
菜单栏点击“帮助”》SSL代理》在移动设备或远程浏览器上安装charles根证书:
Charles抓取https请求及常见问题解决_第9张图片
然后Charles会弹出一个提示框:
Charles抓取https请求及常见问题解决_第10张图片
根据提示信息,先将手机配置为使用Charles的代理。进入手机设置》WiFi,在使用的WiFi上长按,选择修改网络:
Charles抓取https请求及常见问题解决_第11张图片

然后设置代理为“手动”,配置服务器主机IP和端口为Charles的代理,保存:
Charles抓取https请求及常见问题解决_第12张图片
Charles会自动弹窗提示有设备接入,询问是否允许,选择允许:

Charles抓取https请求及常见问题解决_第13张图片
现在,手机上http的请求Charles已经可以正常抓取了,要抓取https的请求,先使用浏览器访问http://chls.pro/ssl下载并安装证书:
Charles抓取https请求及常见问题解决_第14张图片
Charles抓取https请求及常见问题解决_第15张图片
安装完成后,即可抓取手机端的https请求了~

三、安卓手机无法抓取app https请求的原因和解决方案

现象:即使各项配置、证书都完全安装配置好之后,很多使用安卓手机的同学去打开一个APP测试抓包效果时,会发现依然只能抓取http请求,https的请求还是抓取失败:
Charles抓取https请求及常见问题解决_第16张图片
原因:安卓7.0版本及以上系统对于证书的安全策略做了修改,用户证书只能用于代理浏览器的流量,而APP应用是不会信任这些证书。证书没有被信任,就导致只能抓取http请求,而https这一类的请求则无法抓取。而目前市面上的很多手机的安卓版本已经远远大于7.0了:
Charles抓取https请求及常见问题解决_第17张图片
解决方案:
方案一:IOS和安卓<7.0的版本没有此问题,因此如果条件允许,可以换为苹果手机或安卓版本低于7.0版本的老手机去抓取;

方案二:研发人员可以代码中设置不启用该安全策略生成测试APP包,所以通常研发打的测试APP包是没有该问题的,可以正常抓取。因此当正式发布对外的APP无法抓取https请求,可以用测试的APP包来抓取请求;

如果你也碰到同样的问题,恰好你的手机也是安卓手机,可以先看看自己是不是抓的是正式APP的请求,然后试试用公司的APP的测试包先看看是否能正常抓包,而不是花很多的时间去排查配置、证书的问题哦~

=========================================================
都看到这里了,如果对你有帮助,麻烦点个赞+收藏+分享,一键三连啦~

欢迎关注我的微信公众号【程序员杨叔】:测开一枚,持续分享全栈测试知识干货。标签:自动化测试、性能测试、Java、Python、DevOps、CI/CD、小程序测试、测试工具、测试开发、测试框架/平台、测试管理…
Charles抓取https请求及常见问题解决_第18张图片

你可能感兴趣的:(测试知识,常见问题处理,软件测试)