一、修改服务器返回内容
有些时候,想让服务器返回一些指定的内容,方便调试一些特殊情况。例如:列表页面为空的情况;数据异常的情况;部分耗时的网络请求超时的情况;等等。
Charles提供了三个功能可以达到修改服务器返回内容的目的,分别是:Breakpoints 功能、Rewrite 功能、Map 功能。这三者在功能上的差异如下:
1、Breakpoints 功能:适合做一些临时性的修改;
2、Rewrite 功能:适合对网络请求进行一些正则替换;
3、Map 功能:适合长期地将某一些请求重定向到另一个网络地址或本地文件。
二、Breakpoints 功能
Breakpoints 功能类似于 Xcode 中设置的断点一样,当指定的网络请求发生时,Charles 会截获该请求,这个时候,可以在 Charles 中临时修改网络请求的返回内容。
下图是 临时修改获取小区公告信息的 API ,对此 API 返回的内容进行修改的方法如下:
1、对特定的 API 开启 Breakpoints 功能,会发现菜单栏的 Breakpoints 图标已亮起。
2、客户端刷新页面,此时不修改请求内容,直接点击 “Execute” 发送网络请求。
3、进入修改返回内容页面,对小区的公告信息修改后,点击“Execute” 发送返回内容到客户端。
----温馨提示----
使用 Breakpoints 功能将网络请求截获并修改的整个过程中,这个整个网络请求的计时并不会暂停,所以长时间的暂停可能会导致客户端的请求超时。
例如:客户端的请求时间设定为10s,若超过10s还处于修改状态中,则客户端会提示"网络请求超时"。
三、Rewrite 功能
Rewrite 功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。Rewrite 功能非常强大,可以重写接口所有的元素内容,例如:修改请求的 header、url、host、path、query_param、response_status、body 。
例如:修改 request 或 response 的 body
有这么一个接口:http://api.door-dev.luckeylink.com/user/detail,需要把服务器返回内容中含有 “测试” 的字样全部替换成 “test”,方法如下:
1、菜单栏选择 Tools -> Rewrite ,在打开的对话框中勾选上 “Enable Rewrite”,在左侧点击 “Add”,如下图:
2、在右上侧,在 Name 栏可以对此进行命名,在 Location 栏点击 “Add”,在弹出的 Edit Location 对话框中,填入相关参数点击 OK 即可,如下图:
3、在右下侧,在 Rules 栏点击 “Add”,在弹出的 Rewrite Rule 对话框中,填入相关参数点击 OK 即可,如下图:
----温馨提示----
注意编码转换的问题。
4、最后,点击 “Apply” 和 “OK”,重新发起请求,修改的内容即生效,如下图:
设置修改类型,Charles提供了多种类型的修改:
Add Header:请求中增加请求头
Modify Header:修改请求头
Remove Header:删除请求头
Host:修改指向
Path:修改路径
URL:修改请求地址
Add Query Param:增加请求参数
Modify Query Param:修改请求参数
Remove Query Param:删除请求参数
Response Status:修改返回值的HTTP状态值,如:404
Body:修改返回值的详细内容
四、Map 功能
Map 功能分为 Map Remote 和 Map Local 两种方式:
(1)Map Remote 是将指定的网络请求重定向到另一个网络请求地址;
(2)Map Local 是将指定的网络请求重定向到本地文件。
在菜单栏中,选择 Tool -> Map Remote 或 Map Local 即可进入相应功能的设置页面,如下图:
对于 Map Remote 功能,可以将测试环境的域名重定向到线上域名,方法如下:进入Map Remote Settings对话框,勾选 “Enable Map Remote”,点击 “Add”,在弹出的 Edit Mapping 对话框中,分别填写好测试环境和线上环境的域名,重新发起请求即可。
对于 Map Local 功能,需要填写重定向的源地址和本地的目标文件。对于有一些复杂的网络请求结果,可以使用 “Save Response” 功能,方法如下:
1、选择需要模拟数据的接口,右键,选择 “Save Response”
2、先保存接口返回的信息到本地, 接着可以对该信息进行任意修改。比如:修改电话号码,如下图:
3、设置接口访问时,返回的数据指向本地的文件。设置完成后,再次访问此接口,返回的内容则更新为本地文件的内容。
- End -
若有错误,请随时指正。也欢迎大家一起讨论,让我们野蛮成长!