Charles教程

将Charles设置成系统代理

  • 第一次启动Charles会请求设置系统代理的权限

    • 你可以输入登录密码授予Charles该权限
    • 你也可以忽略该请求,然后在需要将Charles设置成系统代理时,选择菜单中的Proxy->Mac OS X Proxy来将Charles设置成系统代理。如下所示:

Charles主界面介绍

  • Structure视图
    • 将网络请求按访问的域名分类
  • Sequence视图
    • 将网络请求按访问的时间排序
  • Raw选项里显示的是原始数据

过滤网络请求

  • 临时过滤
    • 在主界面的中部Filter栏中填入需要过滤出来关键字
    • 举例:要过滤出服务器的地址是:http://xxx.com ,那么只需要在Filter栏中填入xxx即可
  • 快速临时过滤
    • 在想过滤的网络请求上右击,选择Focus
    • 然后在Filter栏勾选上Focussed一项,这样就只显示Focus过的网络请求,如下图:
  • 经常过滤
    • Charles的菜单栏选择Proxy->Recording Settings
    • 然后选择Include栏,选择添加一个要过滤的记录,然后填入需要监控的协议主机地址端口号,这样就可以只截取目标网站的封包了,如下图:

截取本地(本机)上的网络封包

  • 拦截Chrome的网络请求
    • Chrome默认走的是系统代理,当Charles获取了系统代理的权限后就可以拦截Chrome上的请求了
    • 如果Chrome不是走系统代理,可以按如下设置来将其设置成系统代理:设置->显示高级设置->网络->更改代理服务器设置->如下图
    • 拦截不了Chrome请求的原因分析
      • 检查是否走的系统代理,设置方式如上描述
      • 由于使用了翻墙软件,导致Charles拦截不到数据,例如:本人就使用了Lantern,就会勾选自动代理配置,如下图:
      • 也有可能做了过滤请求的设置,以为不拦截请求
  • 拦截Safari的网络请求
    • 只要Charles获取了系统代理的权限后就可以拦截Safari上的请求了
    • 拦截不了Safari请求的原因,主要就是看是否走的系统代理

截取iPhone上的网络封包

  • Charles上的设置
    • 打开Charles的代理功能,在Charles的菜单栏上选择 Proxy->Proxy Settings,填入代理端口号(默认是8888),并且勾上 Enable transparent HTTP proxying就完成了在Charles 上的设置。如下图所示:
  • iPhone上的设置
    • 获取电脑的IP地址,Charles的顶部菜单的Help->Local IP Address,即可在弹出的对话框中看到 IP地址
    • iPhone设置->无线局域网中,可以看到当前连接的wifi名,通过点击右边的详情键(如图),可以看到当前连接上的wifi的详细信息,包括IP地址,子网掩码等信息。在其最底部有HTTP代理一项,我们将其切换成手动,然后填上Charles运行所在的电脑的IP,以及端口号(默认是8888),如下图所示:
  • 设置好之后,打开iPhone上的任意需要网络通讯的程序,就可以看到Charles弹出iPhone请求连接的确认菜单(如下图所示),点击Allow即可完成设置

截取Https通讯信息

  • 安装Charles的CA证书
    • 首先,我们需要在Mac电脑上安装证书(如下图),然后输入系统的帐号密码,即可在KeyChain看到添加好的证书
    • 需要注意的是,即使是安装完证书之后,Charles 默认也并截取Https网络通讯的信息,如果想截取某个网站上的所有Https网络请求,可以在该请求上右击,选择SSL proxyHttp请求是不会显示此菜单项的),这样,对于该Host的所有SSL请求可以被截取到了,如下图:

截取移动设备中的Https通讯信息

  • 真机上安装相应的证书
    • Charles中的菜单Help->SSL Proxying->Install Charles Root Certificate on a Mobile Device or Remote Browser,然后就可以看到Charles弹出的简单的安装教程 ,按照我们之前说的教程,在设备上设置好Charles为代理后,在手机浏览器中访问地址:http://charlesproxy.com/getssl,即可打开证书安装的界面,安装完证书后,就可以截取手机上的Https通讯内容了
  • 模拟器上安装证书
    • Charles中的菜单Help->SSL Proxying->Install Charles Root Certificate in iOS Simulators,然后就可以看到Charles弹出的简单的安装教程
  • 需要注意默认情况下Charles 并做截取,你还需要在要截取的Https网络请求上右击选择 SSL proxy菜单项

模拟慢速网络

  • 在Charles的菜单上,选择Proxy->Throttle Setting 项,在之后弹出的对话框中,我们可以勾选上Enable Throttling,并且可以设置Throttle Preset类型。如下图所示:
  • 如果只想模拟指定网站的慢速网络,可以再勾选上图中的 Only for selected hosts 项,然后在对话框的下半部分设置中增加指定的hosts项即可

修改网络请求内容,方便调试服务器接口

  • 选中指定网络请求上点击右键,选择Edit,即可创建一个可编辑的网络请求,如下图:
  • 可以修改该请求的任何信息,包括URL地址、端口、参数等,之后点击Execute即可发送该修改后的网络请求(如下图所示)
  • Charles支持我们多次修改和发送该请求,大大方便了服务器端接口调试

服务器做压力测试

  • 使用Charles的Repeat功能来简单地测试服务器的并发处理能力
  • 在想打压的网络请求上(POST 或 GET请求均可)右击,然后选择Repeat Advanced菜单项,如下图:
  • 设置打压的并发线程数以及打压次数,确定后就开始打压,如下图:

修改服务器返回内容

  • Charles提供了Map功能Rewrite功能以及Breakpoints功能
    • Map功能适合长期将某些请求重定向另一个网络地址本地文件
    • Rewrite功能适合对指定网络请求进行一些正则替换,适合做批量长期的替换
    • Breakpoints功能适合做一些临时性的修改
  • Map功能
    • Map Remote
      • 在Charles的菜单中,选择Tools->Map Remote即可进入到相应功能的设置页面
      • 需要分别填写网络重定向的源地址目的地址,对于需要限制的条件,可以留空
      • 示例:将所有 ytk1.yuanku.ws(测试服务器)的请求重定向到了 www.yuantiku.com(线上服务器),如下图:
    • Map Local
      • 在Charles的菜单中,选择Tools->Map Local即可进入到相应功能的设置页面
      • 需要填写的重定向的源地址本地目标文件,对于有一些复杂的网络请求结果,我们可以先使用Charles提供的Save Response…功能,将返回结果保存到本地(如下图所示),然后稍加修改,成为我们的目标映射文件
      • 示例:将一个指定的网络请求通过Map Local 功能映射到了本地的一个经过修改的文件中,如下图:
  • Rewrite功能
    • 在Charles的菜单中,选择Tools->Rewrite...即可进入到相应功能的设置页面,如下图:
    • 设置要被Rewrite的请求,如下图:
    • 设置Rewrite的规则
    • 示例:客户端有一个API 请求是获得用户昵称,而我当前的昵称是tangqiaoboy,试着直接修改网络返回值,将tangqiaoboy换成成 iosboy。于是启用Rewrite功能,然后设置如下的规则
      • 设置规则前
      • 设置规则
      • 设置规则后
  • Breakpoints功能

    • 注意:要拦截网络请求必须指定完整路径且路径末尾不要加/,否则拦截会失败,如下图:

    • 当指定的网络请求发生时,Charles会截获该请求,这个时候,我们可以在Charles中临时修改网络请求的返回内容

    • 修改完成后点击Execute则可以让网络请求继续进行
    • 注意:该功能将网络请求截获并修改过程中,整个网络请求的计时并不会暂停,所以长时间的暂停可能导致客户端的请求超时
    • 示例:

results matching ""

    No results matching ""