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 结尾的所有请求 |
可以将协议和端口匹配添加到上面以进一步缩小位置匹配。