奇技指南

在应用开发过程中,通过抓包调试服务端接口的场景时常出现。Charles和Wireshark是开发过程中最常用的两款软件。那么今天,让我们以iOS为例,聊一聊Charles抓包。

本文来自360奇舞团QiShare团队投稿。


在日常开发中,我们无法看到应用程序与服务器之间发送和接收的内容,没有这种可见性,我们在确定故障的确切位置时会非常困难且耗时。而Charles是一个运行在PC上的Web代理,我们将应用程序配置为通过Charles访问网络,便可以在Charles上记录并显示发送和接收的所有数据,进而可以大大提高调试程序的效率。

从下图可以看出Charles的角色:

Charles有以下几个常用功能:

  • 请求预览:通过分组或序列视图预览和过滤请求数据;

  • 请求抓包:抓取HTTP和HTTPS的请求数据和响应数据;

  • 请求断点:拦截指定的请求或响应,预览中间的数据;

  • 数据修改:修改请求数据和响应数据以配合数据测试;

  • 请求重发:指定请求重复发送,以测试后端功能和性能;

  • 网速模拟:设置网速延迟,模拟手机上2G/3G/4G网络;

由于Charles的功能很多,很难在文章中详尽介绍,所以作者以在项目中对Charles的使用为切入点,对最常用、最有用的几个功能进行介绍。

一、安装Charles

Charles是收费软件,有30天的免费试用期限,

之后每使用30分钟会被强退一次,重启后可继续使用。

从Charles官网可以获取Charles安装包。

二、请求预览

Charles启动后,就运行在抓包模式。由于Charles会自动配置PC浏览器的代理,所以,随意打开一个网页(只要有网络请求即可)即可预览到请求信息。

PS:如果使用插件为浏览器设置了独立代理,请关闭插件或者设置成系统代理。

Charles提供了Structure和Sequence两种预览模式。Structure以域名对请求进行分组,可以很方便地预览同一域名下的请求数据,也方便于日常开发中对某一服务接口的分析和处理。图示如下:

Sequence以时间顺序显示请求信息,可以最直接的预览请求信息。在此模式下,可以使用Filter过滤请求,针对性分析。图示如下:

在两种模式下,都可以通过切换标签(Overview、Request、Response等)预览不同类型的请求信息。在最常用的Request和Response标签下,还可以通过切换子标签(Headers、Cookies、Text等)预览对应标签详细内容。图示如下:

三、请求抓包

使用工具栏的白圆红点按钮(快捷键是“Command+R”)可以使Charles在抓包(Start Recording)和不抓包(Stop Recording)之间切换。使用此按钮,在需要调试时再打开抓包功能可以有效减少干扰信息,而快速抓取到需要调试的请求。

对从手机(以iPhone示例)发出的请求进行抓包,需要保证iPhone和PC工作在同一局域网内。

第1步

获取PC的IP地址

在Charles菜单栏 -> Help -> Local IP Address中可以查看PC的IP地址。图示如下:

也可以在Mac终端使用命令ifconfig en1查看PC的IP地址。图示如下:

第2步

配置iPhone代理

在iPhone的 设置 -> 无线局域网 -> 局域网信息(i) -> 配置代理 -> 手动中配置代理,服务器输入框中填写PC的IP地址,端口输入框中填写Charles的代理端口(一般是8888)。图示如下:

具体的端口可以从Charles菜单栏 -> Proxy -> Proxy Settings中查看。图示如下:

iPhone代理配置完成后,Charles会弹出连接提示框,点击Allow之后即可使用Charles对从该iPhone发出的请求进行抓包了。图示如下:

第3步

抓包HTTPS请求

在配置iPhone代理完毕后,就可以通过Structure或者Sequence窗口预览HTTP请求的数据了。但由于HTTPS请求被加密过,预览请求时只能预览到乱码数据。要预览到HTTPS请求的数据明文,需要PC和iPhone安装证书授权。

1)PC安装证书

在Charles菜单栏 -> Help -> SSL Proxying -> Install Charles Root Certificate中可以为PC安装证书,证书可以在Mac的钥匙串中查看。图示如下:

证书可以在Mac的钥匙串中查看,双击证书,将信任权限设定为始终信任。图示如下:

2)iPhone安装证书

在iPhone浏览器中访问 http://charlesproxy.com/getssl 可以下载证书并安装。此地址一般不会变化,可以在Charles 菜单栏 -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser中查看最新的官方证书下载地址。图示如下:

基于iOS的证书信任机制,在安装完成并信任证书后,需要到iPhone设置 -> 关于本机 -> 证书信任设置 中启用根证书。图示如下:

这样,就可以使用Charles中抓包iPhone发出的HTTPS请求并预览明文数据了。

抓包模拟器上的HTTPS请求需要点击Install Charles Root Certificate in iOS Simulators安装证书。

3)启动抓包SSL权限

在Charles菜单栏 -> Proxy -> SSL Proxying Settings中勾选Enable SSL Proxying,然后在Locations中添加需要抓包的Host和Port即可。图示如下:

也可以在抓包界面,右键点击某条/组请求,在弹出的选项列表中点击Enable SSL Proxying启用权限。图示如下:

四、请求断点

在Charles的请求预览界面中,右键点击某条/组请求,在弹出的选项列表中有Breakpoints选项。图示如下:

点击Breakpoints后即为该请求设定了断点。默认情况下,在该请求的Request / Response过程都会受断点控制,即在Request数据发送到的服务端之前会被暂停,在Response数据发送到客户端之前也会被暂停。可以从Charles菜单栏 -> Proxy -> Breakpoint Settings中编辑断点的参数。比如,只需要对Response过程加断点,可以将Request的勾选状态取消。图示如下:

在断点状态下,可以预览和修改请求的中间数据,之后点解Execute按钮即可继续执行请求。

五、数据修改

Rewrite和Breakpoint Editing都可以起到修改请求数据的作用。

1)Rewrite

在Charles菜单栏 -> Tools -> Rewrite中可以开启Rewrite功能,点击Add按钮可以添加一条设置,并可以在右侧的Locations和Rules中分别添加要Rewrite的请求路径和Rewrite规则。图示如下:

Rewrite适合应用于对请求的批量和长期修改,对请求数据影响较大(测试结束后经常忘记去掉规则)。所以,在一些轻量级的数据修改场景中,我经常结合Breakpoint功能修改数据。

2)Breakpoint Editing

结合断点功能,可以很好的实现临时修改请求的Request / Response数据的需求。为某条请求设置断点后,当该请求发生时,会自动跳到断点窗口。点开Edit Request / Response界面,可以看到中间信息,选择合适的数据格式(HTML、Json等)进行修改。修改完成后,点击Execute按钮即可在终端上看到修改后的的效果。图示如下:

六、请求重发

在Charles的请求预览界面中,右键点击某条/组请求,在弹出的选项列表中有Repeat和Advanced Repeat两个选项。图示如下:

单击Repeat会重发该请求一次,常用于测试服务接口能否正常访问,客户端能否正常收到返回数据等。单击Advanced Repeat会弹出重发参数编辑页面,图示如下:

在此编辑界面上,可以自定义Iterations(重发次数)、 Concurrency(并发数)和 Repeat(重发延时),常用于对服务接口进行压力测试。

七、网速模拟

在Charles菜单栏 -> Proxy -> Throttle Settings中可以启用Throttling(节流)功能,并自定义Locations(受限服务接口)和Throttle Configuration(节流配置)。支持对Throttle preset(预置的数据传输方式)、Bandwidth(带宽) Utilisation(利用比率)、 Round-trip latency(往返延迟)、MTU(最大传输单元) Reliability(可靠性) Stability(稳定性)等参数进行编辑。其中,在Throttle preset支持模拟3G/4G网络环境。图示如下:

使用Throttle功能,可以方便地排插因为若网而导致的bug,而这类bug在线上很容易出现,而且很难排查复现。

界世的你当不

只作你的肩膀

360官方技术公众号

技术干货|一手资讯|精彩活动

空·

更多iOS及周边技术文章可点击阅读原文

关注QiShare

charles 请求出现乱码_基于iOS的Charles抓包实践相关推荐

  1. charles乱码_基于iOS的Charles抓包实践

    奇技指南 在应用开发过程中,通过抓包调试服务端接口的场景时常出现.Charles和Wireshark是开发过程中最常用的两款软件.那么今天,让我们以iOS为例,聊一聊Charles抓包. 本文来自36 ...

  2. java 网络抓包_基于java的网络抓包方法

    本实验是用java实现的网络抓包程序,在windows环境下安装winpcap4.0和jpcap6.0后,下载eclipse和jigloo插件(一种在eclipse底下作图形化开发的工具),将其安装好 ...

  3. 苹果手机iOS系统关闭抓包或卸载Charles抓包证书步骤

    苹果手机iOS系统关闭抓包或卸载Charles抓包证书步骤 很多小伙伴,抓包完成后,不想再次抓包了,如何关闭呢? 可以最简单的操作,是从手机设置,进入通用 找到通用 下方的 VPN与设备管理,点击进入 ...

  4. 详解Android/IOS平台下抓包工具使用以及抓取API接口

    抓包工具 Charles 主机允许代理模式 客户端设置代理 截获数据包 HTTPS 模仿一个app UI 请求接口封装 加密请求 Headers 参考项目 抓包(Packet Capture),实际上 ...

  5. Fiddler抓包工具详解(五)(IOS、安卓抓包+fildder插件)

    文章目录 HTTPS抓包 HTTPS与HTTP区别 设置过程 错误解决 验证 Firefox HTTPS请求捕获 IOS设备APP抓包 Fiddler设置 IOS设备设置 IOS设备抓包-安装证书解密 ...

  6. Charles最新破解版苹果iphone安卓android手机抓包分析教程笔记

    Charles最新破解版苹果iphone安卓android手机抓包分析教程笔记 中间遇到各种问题导致最终没法看到抓包信息,一个坑一个坑的埋,终于成功抓包小程序. 梳理了下可以尽量减少栽坑的安装过程,如 ...

  7. 使用BurpSuite对IOS客户端app抓包方法

    使用BurpSuite对IOS客户端app抓包方法 BurpSuite代理环境设置 设备 BurpSuite设置 打开BurpSuite>proxy>options 导出CA证书 传送文件 ...

  8. 实战录 | 基于openflow协议的抓包分析

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于 ...

  9. IOS 使用BurpSuite抓包

    IOS 使用BurpSuite抓包 参考:https://blog.csdn.net/D516701881/article/details/109102443 环境 一台可以开热点的PC BurpSu ...

  10. IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效

    IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效 参考文章: (1)IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效 ( ...

最新文章

  1. UI设计师面试如何操作才能获得高薪
  2. 面试前你必须知道的三个排序算法
  3. linux系统软件包分类,Linux软件包管理和编译安装
  4. 那些不被关注但很重要的html标签
  5. 申万一级行业日指数_申万一级行业指数一周表现
  6. C++五子棋(一)——开发环境
  7. chrome 主进程cpu占用50%怎么办?
  8. 关联关系、依赖关系总结
  9. 易懂分布式 | Kademlia算法
  10. 简单mysql优化_MySQL简单优化
  11. [转]VS2010 安装 fixedsys字体
  12. win7IE10和win7IE11浏览器更新所需补丁全套【附安装流程】
  13. ZOJ 3216 Compositions(矩阵优化DP)
  14. vue2 element使用笔记总结
  15. tdd测试_变异测试是TDD的发展
  16. Chrome浏览器截屏插件的开发
  17. DOS-dir查看目录下的文件列表
  18. FreeType解析矢量字体存在的问题以及优化技巧
  19. Solidity如何通过代码减少gas消耗
  20. 【Python黑科技】获取每日一句美句,并定时发送邮件到指定邮箱(保姆级图文+实现代码)

热门文章

  1. SDP中fmtp的使用
  2. java 天上掉东西游戏的源代码_【小游戏】前两天的小游戏终于调试成功了。。。。直接源代码...
  3. VMware 虚拟机安装 android-x86_64 iso镜像
  4. mybatis中的动态Sql略解,基础理解,为什么要使用动态sql,动态sql相比于传统sql的区别;仅作笔记,如有错误请及时指出
  5. 远程控制多台服务器,perl远程执行多台服务器shell命令
  6. mysql engine类型 小项目_项目中常用的19条MySQL优化
  7. jvm学习--类加载器
  8. Hibernate注解与JPA
  9. 进入第一个Android应用界面
  10. 如何对系统日志中事件 ID 9、事件 ID 11 和事件 ID 15 错误消息进行故障排除