Charles是一款强大的抓包调试工具,相信做Android和Apple开发的同事会经常用到。我平时在PC端抓包接口也经常用Charles。而且Charles对移动端的支持非常友好,能够方便地与模拟器或真实设备结合,帮助开发者分析app的网络流量。它不仅支持HTTP请求,还可以通过SSLProxying解密HTTPS流量,让开发者可以查看加密的数据。
Charles对移动端调试的支持非常友好,可以通过代理和SSL解密轻松捕获app发出的网络请求。此外,Charles的断点、限速等功能也能帮助我们模拟真实的网络环境,提升调试效率。这些特点使Charles成为移动端开发者的理想选择,特别是在没有接口文档的情况下,通过抓包可以直观地查看请求参数和响应格式,为理解代码逻辑提供极大帮助。
要开始使用Charles,我们首先需要完成下载和安装。以下是具体步骤:
我激活的时候用的是上面的这个账号和key。不过这个会不会长期有效我就不确定了哈。
Charles的主界面主要就长这样:
我先说明一下上面那几个图标的功能和用处:
扫帚图标(ClearSession):
红色圆圈(Record/Stop)
锁图标(SSLProxying)
乌龟图标(Throttling)
六边形图标(Breakpoints)
钢笔图标(Edit/Compose)
旋转箭头(Repeat)
绿色勾图标(Auto-Respond)
扳手与螺丝刀图标(Settings/Tools)
齿轮图标(ProxySettings)
这些图标和按钮是Charles主界面中最常用的工具,能够帮助用户灵活控制抓包、限速、断点调试等功能,让网络调试过程更加高效。
可以看到Charls左侧有两个查看封包的视图,分别名为Structure和Sequence
Structure和Sequence是用于查看和组织捕获到的网络请求的两种不同视图方式:
就像这样的结构
Charles的菜单栏包含了各种功能选项,是我们进行抓包设置、调试和控制的主要入口。其中我们用的最多的就是Proxy和Tools这两个菜单。稍后调试也是需要操作这两个菜单,我先介绍下各个菜单项的功能和用法:
接下来我们重点了解一下Proxy菜单和Tool菜单的使用。
Proxy菜单各项的简单说明上面我们已经说过了。现在我们说几个平常用的比较多的选项:
RecordingSettings是Charles中用于配置录制选项的设置。通过这个选项,用户可以控制Charles在抓包过程中的录制行为,设置录制的数据量限制、请求记录的数量,以及WebSocket消息的记录量等。它的主要作用是帮助用户优化抓包数据的管理,防止Charles记录过多数据而导致系统性能下降或数据杂乱难以管理。
点击RecordingSettings...后,会弹出一个设置窗口,如截图所示,包含以下三个标签页:
当打开Include标签页时,会看到一个列表,其中列出了当前已经配置的过滤条件。如果这个列表为空,则Charles将默认记录所有请求。列表中的每个条目表示一个过滤条件,只有符合这些条件的请求才会被记录到会话中。
注意:所有字段均支持使用通配符*和进行匹配。例如,*表示任意字符,表示单个字符。
假设我们只想记录以下请求:
步骤如下:
通过设置Include标签页中的过滤条件,用户可以灵活控制Charles只记录特定请求,减少无关数据,提高数据的管理效率。这在需要聚焦于特定API或域名时非常有帮助。
SSLProxyingSettings(SSL代理设置)是Charles中用于配置SSL流量解密的功能。通过启用SSL代理,Charles可以拦截和解密HTTPS请求,帮助用户查看加密流量的内容。这对于调试HTTPS请求非常有用,尤其是在查看和分析数据包内容时。SSLProxyingSettings包含四个标签页:SSLProxying、ServerCertificates、ClientCertificates和RootCertificate,以下是每个标签页的详细介绍。
假设只想解密来自example.com域名的HTTPS流量,可以执行以下操作:
SSLProxyingSettings是Charles中非常重要的功能,主要用于配置HTTPS流量的解密。通过SSLProxying标签页设置需要解密的流量范围,而ServerCertificates、ClientCertificates和RootCertificate标签页则帮助用户管理证书,确保Charles能够成功解密加密的流量。在需要调试HTTPS请求和查看加密数据内容的场景中,这些设置至关重要。
ThrottleSettings是Charles中用于设置网络限速的选项,能够模拟不同的网络环境(如慢速连接、延迟较高的网络等)。通过此设置,我们可以在Charles中为请求配置带宽、延迟和其他网络特性,以测试应用在不同网络条件下的表现。这个功能对于移动应用或Web应用的性能优化和稳定性测试尤为重要。
打开ThrottleSettings界面后,看到如下设置项:
Charles提供了多项预设和自定义的限速设置,以便模拟不同的网络条件。主要参数如下:
ThrottleSettings为开发者提供了丰富的网络模拟功能,是Charles中用于性能测试和网络行为分析的重要工具。
BreakpointSettings是Charles中设置请求和响应断点的功能,允许用户在请求发送前或响应返回前拦截流量并手动查看、修改内容。这个功能非常适合用于调试和测试不同的请求参数或响应数据,帮助开发者模拟各种场景,观察应用的处理逻辑。
打开BreakpointSettings后,可以看到以下选项:
注意:这些字段支持使用通配符*和进行匹配,以便更灵活地设置断点条件。
一旦断点被触发,Charles会暂停请求的发送或响应的返回,并弹出断点窗口。在断点窗口中,可以进行以下操作:
这在模拟不同场景时非常有用,比如返回特定的错误代码或数据,观察客户端在不同响应情况下的表现。
BreakpointSettings是Charles中强大且灵活的调试工具,尤其适合用于精确控制请求和响应的行为,有助于深入测试和调试网络请求。
ReverseProxies是Charles中的反向代理功能,允许用户将请求重定向到另一个服务器或地址。通过设置反向代理,开发者可以在不修改客户端代码的情况下,将应用程序的请求从一个服务器重定向到另一个服务器,比如将请求从生产环境重定向到测试环境。这在调试、测试和环境切换中非常实用。
ReverseProxies是一个灵活的工具,帮助开发人员轻松管理和切换请求流向,避免直接修改客户端代码,从而更高效地完成调试和测试工作。
PortForwardingSettings(端口转发设置)是Charles中用于配置端口转发的功能。端口转发允许用户将本地的TCP和UDP端口流量重定向到远程服务器上的指定端口,这在开发和测试场景中非常有用。例如,可以将本地应用程序的请求转发到远程服务器的特定端口,或模拟不同的服务器环境。
打开PortForwardingSettings界面后,会看到以下设置项:
注意:必须确保远程服务器的端口是开放的,并且防火墙允许通过。
假设我们希望将所有对本地端口8080的请求转发到远程服务器test.example.com的80端口,步骤如下:
现在,所有发送到本地端口8080的请求都会被自动转发到test.example.com的80端口。
PortForwardingSettings是Charles中的高级功能,帮助开发者灵活地控制本地和远程服务器之间的流量转发,极大地简化了在多服务器或多环境下的测试流程。
macOSProxy(在Mac上)和WindowsProxy(在Windows上)是Charles中的系统代理设置功能。它们的作用是将Charles设置为操作系统的全局代理,从而捕获系统中所有网络请求。通过启用这个选项,Charles可以自动拦截和监控操作系统以及所有应用程序的网络流量,而不仅限于浏览器。
macOSProxy和WindowsProxy功能是Charles提供的便捷设置,适用于全局抓包、HTTPS解密和跨应用的流量分析,使调试和测试更加高效。
ProxySettings(代理设置)是Charles中用于配置代理行为的选项。通过这个设置,用户可以控制Charles的代理端口、SOCKS代理、系统代理等参数,灵活管理Charles捕获的网络流量。ProxySettings中包含三个标签页:Proxies、Options和macOS,每个标签页都有不同的功能和用途。
ProxySettings是Charles的核心配置之一,帮助用户管理代理行为,使Charles能够灵活地捕获和分析指定的网络流量。
AccessControlSettings(访问控制设置)是Charles中用于管理访问权限的功能。通过设置访问控制列表,用户可以决定哪些设备能够连接到Charles实例,从而控制Charles代理的安全性和访问权限。
AccessControlSettings提供了一个简便的访问控制方式,使得Charles的代理服务更安全,并且能灵活适应多设备的调试需求。
ExternalProxySettings(外部代理设置)是Charles中用于配置外部代理服务器的选项。通过此设置,用户可以让Charles使用外部代理服务器访问互联网,适用于需要通过其他代理才能连接网络的情况,比如在公司内网中使用Charles时,可能需要配置一个外部代理。
ExternalProxySettings功能非常灵活,帮助用户在多代理环境中灵活配置网络连接,以便在不同的网络需求下正确捕获和分析流量。
WebInterfaceSettings为Charles提供了远程访问和控制的能力,特别适合需要跨设备调试和多人协作的环境。通过灵活的访问控制设置,可以在保证安全的同时方便地共享抓包数据。
NoCachingSettings(禁用缓存设置)是Charles中主要用于禁用客户端缓存,以确保每次请求都能从服务器获取最新的数据。禁用缓存在调试和测试时非常重要,特别是在需要查看实时响应或测试缓存策略的时候,避免因缓存导致的内容不更新问题。
NoCachingSettings是Charles提供的一个实用工具,帮助开发者在调试和测试过程中获取最新的服务器响应,避免缓存带来的数据滞后问题。
BlockCookiesSettings(禁用Cookie设置)是Charles用于在调试过程中禁用Cookie。启用该功能后,Charles会拦截并阻止所有请求和响应中的Cookie,确保不会传递Cookie数据。这在测试无状态请求或避免身份验证干扰的场景中非常有用。
MapRemoteSettings(远程映射设置)是Charles允许用户将本地请求重定向到不同的远程服务器或路径。通过设置远程映射,用户可以将请求从一个地址“映射”到另一个地址,而不需要修改客户端代码。这在调试和测试过程中非常实用,尤其是在需要测试不同环境或切换API服务器时。
这是请求的原始地址,即需要被重定向的请求位置。具体选项如下:
这是请求的目标地址,即映射后的请求将会重定向到的地址。
通过这个界面,用户可以灵活地设置请求的重定向规则,使得Charles能够轻松地在不同服务器和路径之间切换请求流向。
MapRemoteSettings是Charles提供的强大映射工具,允许用户在不同服务器和路径之间灵活切换,适合多环境测试、API版本对比和远程资源模拟,是开发和测试过程中的一大便利。
MapLocalSettings(本地映射设置)可以将特定的远程请求映射到本地文件。通过本地映射,用户可以使用本地文件来响应来自指定远程服务器的请求。这在测试和开发过程中非常有用,尤其是在调试静态资源或模拟服务器响应时,无需频繁访问远程服务器。
MapLocalSettings是Charles中一个灵活实用的功能,可以大幅度提升调试效率,帮助开发者在不依赖远程服务器的情况下测试和模拟请求响应。
RewriteSettings(重写设置)是Charles中的一项强大功能,用于在请求和响应通过Charles时动态修改它们的内容。通过重写规则,用户可以更改请求头、请求体、响应头和响应体,而无需更改客户端代码或服务器端配置。这在调试和测试不同的请求/响应场景时非常有用。
在RewriteSettings或MapLocal/RemoteSettings中,EditLocation界面用于定义重写或映射的匹配条件。这里用户可以根据请求的各种属性进行过滤,以便Charles仅对符合条件的请求执行操作。
在RewriteSettings中,RewriteRule界面允许用户配置具体的重写规则,包括如何匹配请求和响应内容,并替换指定的部分。
应用场景:例如,可以修改请求的User-Agent字段值,或对响应内容进行特定文本替换,以便观察客户端如何处理不同的响应。
BlackListSettings(黑名单设置)是Charles中用于阻止指定的请求。将特定的URL、主机或路径加入黑名单后,Charles会自动拒绝这些请求,使客户端无法访问它们。这在调试和测试中非常有用,可以模拟网络不可达或资源被屏蔽的情况。
AllowListSettings(允许列表设置)是Charles中用于精确控制请求访问权限的功能。与黑名单相反,允许列表功能仅允许特定的请求通过,其他所有请求都会被阻止。这在需要严格限制网络请求的场景中非常有用,比如只想监控某些特定的API请求,或模拟只允许访问某些资源的网络环境。
DNSSpoofingSettings(DNS欺骗设置)是Charles中用于将指定的域名解析到不同的IP地址。通过这个功能,开发者可以模拟不同的DNS解析结果,将请求重定向到指定的服务器或IP地址,而不需要修改本地系统的DNS配置。这在测试环境中非常有用,尤其是当需要在不同服务器之间切换请求时。
MirrorSettings(镜像设置)是Charles中用于将所有网络请求的流量镜像到另一台服务器或目标地址。启用此功能后,每次请求都会被Charles同时发送到原始服务器和指定的镜像服务器。这在测试和监控中非常有用,可以帮助开发者实时检查请求的数据和行为,而不影响实际请求的响应。
MirrorSettings是Charles中用于复制和重定向请求流量的工具,非常适合在需要进行流量监控、负载测试或调试日志记录时使用。这个功能确保了请求被同时发送到多个地址,为开发和测试提供了更灵活的选择。
Compose(组合请求)允许用户手动创建并发送自定义的HTTP请求。通过Compose功能,用户可以编辑请求的URL、方法、头信息和请求体,直接向服务器发送该请求,并查看响应。这在测试特定API接口、验证服务器响应或进行手动调试时非常有用。
Repeat功能帮助用户轻松重复网络请求,适合在调试和测试中需要多次验证同一请求响应的情况,是一个简单而实用的工具。
AdvancedRepeat是一个非常实用的功能,适用于需要在受控环境下测试服务器性能和负载能力的场景,使得Charles能够模拟真实的流量模式,帮助开发和测试人员分析服务器的响应情况。
Validate(验证)是Charles中用于检查选定请求的响应内容是否符合特定的标准或格式。这可以帮助开发人员快速验证服务器响应的正确性,例如检查响应是否符合预期的状态码、内容格式,或是否包含特定的字段信息。在调试API接口和数据完整性时,这项功能非常有用。
Validate功能是Charles中的一个辅助调试工具,适用于在接口调试和数据完整性检查时使用,可以更快发现数据格式和内容上的问题,提升API调试效率。
Import/ExportSettings(导入/导出设置)用于将Charles的配置导出为文件或从文件导入配置。这可以帮助用户在不同的设备或项目之间共享Charles的设置,包括代理规则、映射设置、重写规则等。该功能非常适合团队协作或多设备同步配置,确保调试环境一致。
Profiles(配置)用于创建和管理不同的配置文件。通过Profiles,用户可以保存和切换不同的Charles设置,包括代理规则、映射规则、重写规则等。这在需要频繁切换不同的调试环境或测试场景时非常有用,因为可以快速加载预设的配置文件,而无需手动更改设置。
Charles的主界面介绍以及菜单介绍大概就是上面那些了接下来我们来操作Charles进行pc抓包和移动端抓包测试。
这样就可以了哈。
我用的是AndroidStudio创建的模拟器跟手机端差不多的都是设置wifi代理
这样我们就实现了pc端和移动端用Charles抓包的效果。我也是好久没用了刚好工作需要所以重温一下Charls的用法。