Charles是一款功能强大的网络抓包工具,能够支持http和https类型的通信协议,本文就来记录一下平时开发中遇到的一些基础功能和小技巧,以备以后遇上问题随时可以查阅。

HTTP配置

启动charles界面会发现主界面上没有任何网络连接记录,因为还没有手机设备连接Charles作为网络请求代理。配置手机代理为Charles工序,首先新打开一个命令行窗口输入ipconfig /all命令,可以查看到当前连接的有线网络ip地址,为手机的链接的wifi地址设置代理IP为连接的有线网络IP,端口为8888。

charles 网关 打开charles无法上网_Charles


发现此时依然无法连接到charles,这是因为防火墙没有关闭,关闭windows的网络防火墙之后即可查看到手机的请求网络包。这个时候Charles会弹出一个是否允许xxx连接的对话框,点击Allow允许手机连接Charles。

HTTPS配置

charles配置https拦截需要配置证书,点击Help->SSL Proxying->Install Charles Root Certificate,完成之后点击Save Charles Root Certificate…将证书保存到Administrator目录下。新启动一个命令行工具,将路径切换到Administrator目录下并且执行adb push xxxx.cer /sdcard/Download,这个命令会把证书放到手机的Download目录下。

charles 网关 打开charles无法上网_charles 网关_02


在手机的设置->安全->从存储设备安装,选中Download里的证书点击即可完成安装。返回charles点击Proxy->SSL Proxying Settings增加要抓包的https路径,这样就能够抓取https网络数据。

charles 网关 打开charles无法上网_数据_03

7.0 HTTPS抓包

7.0版本默认不再信任用户自己的证书,需要在应用中配置信任用户自己的证书,创建xml配置文件使得Android信任Charles导出的证书,同时需要在application节点中增加xml引用。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">

        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>

    </base-config>

</network-security-config>

<application
     android:networkSecurityConfig="@xml/network_security_config"
     android:allowBackup="true"
     android:label="@string/app_name">
     .....
</application>

Focus Hosts配置

在View->Focus Hosts…菜单选项会打开如下的对话框,将你需要抓包调试的URL主机名添加到Focus Hosts中,这样就可以在Structure Tab页看到被关注的主机和手机其他网络连接区分开来,这个功能对于手机安装了特别多的应用时调试某几个连接特别有用。

charles 网关 打开charles无法上网_xml_04

charles 网关 打开charles无法上网_Charles_05

Throttle设置

Throttle就是网络阈值设置,在Proxy->Throttle Settings…菜单激活,所谓的网络阈值就是指网络数据传输速度,比如有些应用需要测试56kbps的modem上网情况下应用是否够流畅,但是公司里的开发网络一般都是高速wifi环境,如何模拟这种慢速网络呢,当然可以让手机连接上Charles同时设置网络阈值为56kbps,这样就能模拟低速网络环境。

charles 网关 打开charles无法上网_客户端_06


使用的时候一定要注意Enable Throttle需要勾选上,同时Throttle类型有很多种,比如小区上网等,用户也可以自己输入上行和下行网络速度。

BreakPoint设置

手机应用做网络请求的时候,用户需要查看请求发送的数据或返回的数据,假如用户这时候向修改一下请求数据或返回数据就可以使用这个功能。Proxy->BreakPoints…菜单选项会打开如下的对话框,用户输入要打断点的url地址,这样在手机发起请求和返回数据都会暂停一下,等待用户的处理。这个功能在判断多种情况下展示逻辑特别有用,比如一个界面在成功和失败情况下返回的结果码不一样,而应用针对成功失败展示不同的界面效果,这个时候只需要简单的修改一下返回的结果码就可以同时测试两种情况下的UI。

charles 网关 打开charles无法上网_Charles_07

Map Local/Map Remote

实际开发中经常会发生客户端和服务端同时开发的情况,也就是说客户端必须在没有真正的服务端接口情况下开发,这种情况下Map Local和Map Remote就相当的有用了。一般来说后台开发者都会先和客户端定好后台数据返回的格式并且更新到后台API接口文档上,这时客户端可以用API接口中的格式假造一份数据,然后Map Local到Charles上,这个时候访问正式接口的API就会返回假数据,客户端就可以开心的做界面开发了。

charles 网关 打开charles无法上网_Charles_08


假如后台因为测试问题导致服务还未能上到线上,而客户端需要使用正式接口访问,那么也可以使用Map Remote将正式环境的请求映射到测试服务器上,这样就好像能访问远程的正式环境一样。

Rewrite配置

重写配置通常来说都是用来统一修改请求数据或请求返回结果数据,比如在一个请求返回的是一个列表数据,而这个列表数据条目在你测试客户端的时候需要统一修改成另外一个值,如果向BreakPoint那样暂停然后一个一个修改,这样即耗时又不一定能做的正确无误,这个时候使用Rewrite重写返回值里的那条匹配数据,就能轻松完成这种修改,如果不需要这种修改了可以关闭掉这个Rewrite配置。

charles 网关 打开charles无法上网_数据_09


以上就是开发者平时需要使用到的Charles基础功能,以后如果还有其他好用的功能还会在更新上来。