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

发布时间 2023-07-17 17:40:54作者: 一只琥珀

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

Charles 4.5.6汉化版,赶紧上车,懂的都懂

百度网盘:链接:https://pan.baidu.com/s/1y7KuzSg_SKmtEP4OTRycwg?pwd=52pj

提取码:52pj

注册信息:
用户名:52pojie
注册码:E63519EFB77448393C

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

2.1 Charles https配置
1、菜单栏点击代理》代理设置:

设置代理的端口号,比如设置为:8888,这个端口号后面手机端连接时需要用到:

2、菜单栏点击代理》SSL代理设置:

勾选启用SSL代理,添加主机和端口都为*:

2.2 Charles PC端证书安装

1、PC端证书安装:
菜单栏点击“帮助”》SSL代理》安装charles根证书:

根据步骤一步步往下走:

 

安装完成后,记得去电脑的网络和Internet中设置本地使用代理为Charles开启的代理服务器:

 

踩坑注意:
地址这里要设置: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会弹出一个提示框:

根据提示信息,先将手机配置为使用Charles的代理。进入手机设置》WiFi,在使用的WiFi上长按,选择修改网络:

 然后设置代理为“手动”,配置服务器主机IP和端口为Charles的代理,保存:

 Charles会自动弹窗提示有设备接入,询问是否允许,选择允许:

现在,手机上http的请求Charles已经可以正常抓取了,要抓取https的请求,先使用浏览器访问http://chls.pro/ssl下载并安装证书:

 

 

安装完成后,即可抓取手机端的https请求了~

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

现象:即使各项配置、证书都完全安装配置好之后,很多使用安卓手机的同学去打开一个APP测试抓包效果时,会发现依然只能抓取http请求,https的请求还是抓取失败:

原因:安卓7.0版本及以上系统对于证书的安全策略做了修改,用户证书只能用于代理浏览器的流量,而APP应用是不会信任这些证书。证书没有被信任,就导致只能抓取http请求,而https这一类的请求则无法抓取。而目前市面上的很多手机的安卓版本已经远远大于7.0了:

 

解决方案:
方案一:IOS和安卓<7.0的版本没有此问题,因此如果条件允许,可以换为苹果手机或安卓版本低于7.0版本的老手机去抓取;

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

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