Charles 使用
本文简单介绍 Charles 的使用
Rewrite 功能
几乎可以用来修改 HTTP 请求中的所有数据
例如 Request 中的 path、query param 等等
这样的好处是只需要篡改请求中的数据,而不需要修改代码,避免重新编译,可以节省时间,也不会污染代码,造成发版时忘记修改回来的问题。
具体操作如下,我们以 将请求中的 versionCode=46 修改为 1111111为例
- 点击 Tools - Rewrite

- 新增规则 
 在面板上分成了三个区域,如下
 第一个区域为 配置区 ,用来管理各种配置
 第二个区域为 匹配区 用来匹配 Location
 第三个区域为 重写规则区 在这里新增各种重写规则
  
- 编辑 Location  - 这里一共有五个地方,分别是 
 Protocol 填写协议
 Host 填写域名
 Prot 填写端口
 Path 填写路径
 Query 填写查询的值
如果不填写将会匹配所有的值,这里可以填写 * 和 ? 通配符
修改 Request
- 填写 Rewrite 规则  - 首先选择 Type(类型) Modify Query Param - 即修改 Query 参数 
- 在 Match 中填写需要修改的参数的 name 以及对应的 value 
 - 在我们的例子中,就是 versionCode 及 46 
 3. 在 Replace 中填写相对应要修改的参数名和值
 在我们的这个例子中,我们只需要将 versionCode 的值改成 1111111,所以只需要将 Replace 中的 Value 填写为 1111111
这样就可以将 HTTP 请求中的数据进行修改了,不需要修改代码和重新编译。节省了大量的时间
修改 Response
同理,我们也可以修改 HTTP 请求中的 Response 中的数据,修改成我们调试所需要的信息
只需要在 Rewrite Rule 中的 Type 中选择所需要修改的类型,例如 Response Status、Modify Header、Body 等

并在 Where 中选择是修改 Request 还是 Response ,下面的规则同理。
Location Match 包含了可用于匹配请求URL的协议,主机,端口和路径字段。
任何字段都可以留空,这种情况下会匹配上任何值。
- 通配符(Wildcards)
 通配符支持使用 * 、**?** 和 […]
* 匹配0个或者多个字符,**?匹配一个字符,字符范围[…]** 匹配范围内的一个字符,例如 [a-z] 或者 [aeiou]
- 路径(Paths)
 要匹配子路径,必须使用/*结尾
 注意:在之前的 Charles 版本中这是隐含的,但现在是必须的
- 查询值(Query)
 查询字段和查询字符串内容相匹配,并不匹配以?开头的字符,要注意到?是一个通配符
 查询字段和其他字段一样可以包含通配符,因此你可以像这样,在 Query 中任何地方使用*page=1*去匹配page=1
- 常见用途
 要将每个请求和给定的 host 匹配,填入 host 并将其他字段留空
 要将每个请求和给定的 host 以及路径匹配,填入 host 并把路径已/结尾,并把其他字段留空
 要将每个文件和给定的 host 上的后缀(suffix)相匹配,则填入 host 和/*.suffix,并将其他字段留空
| Host | Path | Result | 
|---|---|---|
| charlesproxy.com | 匹配所有到 charlesproxy.com 的请求 | |
| *.charlesproxy.com | 匹配所有 host 以 .charlesproxy.com 结尾的请求 | |
| charlesproxy.com | /charles/ | 只会匹配所有到 charlesproxy.com/charles/ 的请求 | 
| charlesproxy.com | /charles/* | 匹配所有到 charlesproxy.com/charles/ 的请求,包括文件和子路径 | 
| charlesproxy.com | /charles | 只会匹配所有到 charlesproxy.com/charles 的请求 | 
| charlesproxy.com | /index.html | 只会匹配所有到 charlesproxy.com/charles.html 的请求 | 
| charlesproxy.com | /*.html | 匹配所有到 charlesproxy.com 并且以 .html 结尾的所有请求 | 
| /charles/*.html | 匹配任何 host 的所有在路径(包括子路径) /charles/ 中以 .html 结尾的所有请求 | 
可以将协议和端口匹配添加到上面以进一步缩小位置匹配。