Charles 使用

视图界面

Charles 提供了两种不同视图方式:

  1. structure 视图是将网络请求按访问的域名分类。

  1. Sequence 视图是将网络请求按访问的时间排序。


请求与响应的内容:

image

常用功能

Focus(视图分组)

你会发现当请求过多时左侧域名显示杂乱,那么可以右键“focus”你需要的请求,这样,URL就会被大致分组,想找的 URL 显而易见。见下图:

image

Repeat(重发请求)

repeat 功能可以实现一次重复请求:

image

copyResponse、saveRequest、saveResponse

可以将本次请求返回的数据完整保存下来以便修改,配合 maplocal 使用模拟服务端发送想要的请求,右键选择一个请求,选择“save Response”,保存到本地。

这里以 https://m.baidu.com 为例,见下图:

image

Map(重定向)

将某个请求进行重定向,用重定向后的内容来作为响应内容。

map 功能分为 map Local 和 map Remote,二者区分是:

  • map Local:是将某个网络请求重定向到本地的某个文件(之后 charles 就不会访问服务器,而是采用你本地的响应进行返回给客户端)。

  • map Remote:是将某个网络请求重定向到另一个网络请求。

二者除了重定向文件的位置不同之外,其他功能都是一样的。他们对 js、css、html 以及 api 接口均可重定向,此外也可以使用通配符来进行简单的批量匹配,达到批量重定向的目的。


在使用 map 功能时,常见的使用场景简要说明如下:

  1. js、css 重定向:主要是来调试 js 和 css 的实现效果。

    • 例如本地开发获取不到接口数据,那么就使用测试环境,通过 map Local 来将制定的js、css重定向本地进行开发。
    • 例如线上有个 bug,想定位问题,但是线上代码都压缩过没法 debug,这时可通过重定向到本地实现调试。
  2. html 重定向:在开发过程中由于本地没有数据,那么可以使用测试环境的数据进行开发而不用 mock 数据,这时可以访问测试环境的某个页面,然后将其页面的 html 重定向到本地的某个页面以获取测试数据。

  3. api 重定向: 为了 mock 数据。一般使用 map Remote 功能来将本地的请求重定向到测试或者线上环境的网络请求。


示例

这里以 https://m.baidu.com 为例,将 response 保存到本地并将 response 文件中第一个 id 的名字从“js_event”改为“js_event_test”,然后右键选择”maplocal”:

image

选择修改后的文件,“OK”,见下图:

image

执行 repeat,再次请求看到的返回结果就是修改后的结果了,见下图:

image

image


2)所有 Map local 的请求都可以在“Tools->Map local”中查看到,在这里也可以点击”Add”手动添加,见下图:

image

Rewrite(重写报文内容)

Rewrite 可重写对应的报文内容,主要可以对某些匹配请求的 header、host、url、path、query param、response status、body 进行 rewrite。

应用场景:拦截 request 和 response 并做相关参数的修改,最终使用的数据是修改后得到的数据,来模拟不同场景或条件下的异常测试,和 map local 功能搭配使用效果更佳哦。

也可以看作 map local 的升级版,比如 map local 无法解决的问题,可以用 Rewrite 处理。

修改请求参数

作用:可以对 param 进行操作,包括修改、添加、删除等。

使用场景:有时请求可能多传递了不必要的参数,这时可以 rewirte 功能去掉多余的参数;另外也可以添加必须而暂时无法提供的请求参数。


示例( get 与 post 方法修改一致)

这里以 https://m.baidu.com 为例,想要将请求中“logFrom”的值从 index 改为 index_test:

image

选择“Tools->Rewrite”:

image

  1. 点击下图 ① 位置添加一条新数据,可以给新添加的数据起个名字;
  2. 点击下图 ② 位置的“Add”(见下图 ②)将整个请求 URL copy 进去,Charles 会自动识别;
  3. 点击下图 ③ 位置修改 Rule:

image

(左侧栏为当前 rewrite 规则,勾选则代表启用)

  1. 这里我们选择“Modify Query Param”;而如果是添加一个请求参数,请选择“Add Query Param”:

image

添加后点击“Apply->OK”,保存后再次 repeat 请求,查看 request 结果,如下图:

image

修改响应参数

作用:对请求的响应内容做修改,一般是对某一个或几个值进行 rewrite,用新的值来替代返回的值。

使用场景:可以用来 mock 数据,比方说在开发中为了测试功能需要请求的某个数组字段有值,但是当前环境无法给出,那么就可以使用该功能。

如下图,会将返回数据中的 2018-08-05 全部替换成 2018-08-03。

image

修改请求 header

作用:可以对请求或者响应的 header 内容进行操作,包括添加、修改及删除。

使用场景:在需要对 header 进行处理时用到,例如为了用上某个环境数据,可能需要对应 userid,这时本地开发是可以在请求的 header 中加上 userid 信息;也可以用来重写响应 header 的信息。

如下图,会在请求的 header 中添加 userid 属性。

注:Match 栏的 name 和 value 值如果不填会匹配所有的请求,如果有值,则去匹配有关键字的请求。

image

修改请求 path

使用指定 rewrite 规则的 path 来响应指定的请求 path,它可以对 path 进行裁剪。

image

请求的结果如下:

image

其他

host

主要是对请求进行 host 修改,以达到本地请求获取指定 host 环境中的数据,常见于 mock 数据。


url

  • 作用:修改 url 中某些部分,可以用别的 url 进行替换或者 url 裁剪时间戳或者 md5 等。

  • 使用场景:场景使用非常多,既可以对 host 也可以对 path 进行 rewrite,可以满足指定 host 下的请求重定向到其他 host 下对应 path 下。


response status

很少用到,顾名思义就是对 response 的状态码进行 rewrite。

Throttle settings(弱网测试)

image

“Throttle settings”提供了限速功能,可以模拟设备弱网场景下的异常测试,可以结合上面功能一起使用。

1)选择“Proxy->Throttle Settings”设置限速,见下图:

image

2)可以选择的模拟网络情况有 2G、3G、4G,见下图:

image

3)如果已有设置不满足需求,也可手动设置,见下图:

image

4)点击菜单栏中的小乌龟可以开启/关闭限速,当小乌龟变成绿色时,表示限速开启,见下图:

image

Breakpoint(断点)

网站分前端和后端,当我们在测试一个网站的时候,出了问题,我们不知道是前端有问题还是后端问题,Web 端可以用浏览器自带的检查来看,而 APP 端则需要用抓包工具。


示例(Web 端与 APP 端使用类似)

打开 Charles 后,点击你要抓的网站,例如一个博客地址:

image

  • logo.jpg 是图片
  • / 是博客里面的内容

以拦截请求为示例,比如:

1)右键选择 Breakpoints(勾上断点)

原来是点完请求后直接发往服务器端,勾上断点后,以后只要你发这个请求,它就会卡那不动。在这你可以看下是否要修改内容。

可以试下,我们先清空 charles,现在再刷新 https://blog.csdn.net/lxy_xy/article/details/88799310 ,发现这个页面是一直转圈,不动。

如下图,在 Breakpoints 的栏下,点击该网址,右侧有个 Edit Request,这里面的东西都可以修改或删除,如没有参数给他添加参数,get 请求修改成 post 请求,删除 cookie 等。只要拦截住了想干嘛就能干嘛。

image

2)修改请求参数

我们能看到在 Edit Request 下有 /lxy_xy/article/details/88799310,这篇文章是 88799310,现在我们把它修改成打开是 88798049 的内容,把它修改成 /lxy_xy/article/details/88798049,然后 Execute,即把请求发出去,我们可以看到现在还是 88799310,但是内容已经换成了 88798049 的内容。

注意:当不再使用断点时,一定要右键取消勾选 Breakpoints,否则每当你请求该页面时候都会转到 88798049。

3)修改响应参数

还是用 https://blog.csdn.net/lxy_xy/article/details/88799310 ,在请求上打断点,然后我们重新请求该页面,页面一直转。

在 Breakpoints 的 Edit Request 下,我们点击 Execute 放过这个请求,可以看到变成了 Edit Response。在 HTML 中,把所有的内容换成“哈哈哈”,点击 Execute,页面上内容变成“哈哈哈”。

image

4)断点配置

点击“proxy”-->“BreakPoints Setting”,能看到刚才添加过的请求:

image

双击点击这个请求,在 Query 这个输入框中,输入“*”(表示不管参数是啥,都会进行断点,这里不能填成跟实际的一样,因为有些实际的参数会有时间戳等类似的动态参数值 ,所以不建议那样写死)。

若只需要修改返回值,则只需要勾选 Respone 即可,之后点击 OK 保存。

image

posted @ 2021-09-01 17:16  Juno3550  阅读(334)  评论(0编辑  收藏  举报