Charles 使用

Rewrite 功能

几乎可以用来修改 HTTP 请求中的所有数据
例如 Request 中的 path、query param 等等

这样的好处是只需要篡改请求中的数据,而不需要修改代码,避免重新编译,可以节省时间,也不会污染代码,造成发版时忘记修改回来的问题。

具体操作如下,我们以 将请求中的 versionCode=46 修改为 1111111为例

  • 点击 Tools - Rewrite
  • 新增规则
    在面板上分成了三个区域,如下
    第一个区域为 配置区 ,用来管理各种配置
    第二个区域为 匹配区 用来匹配 Location
    第三个区域为 重写规则区 在这里新增各种重写规则
  • 编辑 Location

    这里一共有五个地方,分别是
    Protocol 填写协议
    Host 填写域名
    Prot 填写端口
    Path 填写路径
    Query 填写查询的值

如果不填写将会匹配所有的值,这里可以填写 *? 通配符

修改 Request

  • 填写 Rewrite 规则

    1. 首先选择 Type(类型) Modify Query Param

      即修改 Query 参数

    2. 在 Match 中填写需要修改的参数的 name 以及对应的 value
      在我们的例子中,就是 versionCode 及 46

    3. 在 Replace 中填写相对应要修改的参数名和值
      在我们的这个例子中,我们只需要将 versionCode 的值改成 1111111,所以只需要将 Replace 中的 Value 填写为 1111111

这样就可以将 HTTP 请求中的数据进行修改了,不需要修改代码和重新编译。节省了大量的时间

修改 Response

同理,我们也可以修改 HTTP 请求中的 Response 中的数据,修改成我们调试所需要的信息

只需要在 Rewrite Rule 中的 Type 中选择所需要修改的类型,例如 Response StatusModify HeaderBody

-w652

并在 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 结尾的所有请求

可以将协议和端口匹配添加到上面以进一步缩小位置匹配。