Charles Map Rewrite功能

Charles Map Rewrite功能,第1张

主要有 Map、Rewrite、Breakpoints:

△Map 功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。

△Rewrite 功能适合对网络请求进行一些正则替换。

△Breakpoints 功能适合做一些临时性的修改。

Map 分为 Map Remote 和 Map Local:

Map Remote 是将指定的网络请求重定向到另一个网址请求地址,Map Local 是将指定的网络请求重定向到本地文件.

Rewrite 功能功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。

Charles常用功能总结

目录

Map、Rewrite、Breakpoints的区别

如何使用Rewrite修改网络请求

        1.修改Header

        2.修改Body

            修改requests的Body

            修改response的Body

        3.修改query param

        4.修改url

正文

一、Map、Rewrite、Breakpoints的区别

Charles提供了Map功能、Rewrite功能、Breakpoints功能,都可以达到修改服务器返回内容的目的,这三者的差异是:

Map功能适合长期的将某些请求重定向到另一个网络地址或本地文件

      Map Local功能:将请求的返回重定向到本地文件中

      Map Remote功能:将请求的域名重定向到一个网络地址

Breakpoints功能适合做临时性的修改,request和response都支持修改

Rewrite功能适合对网络请求进行一些正则替换

二、如何使用Rewrite修改网络请求

1.修改Header

例如修改cookie

1)打开Rewrite

2)添加请求

3)添加修改的类型

完成后,抓包查看之后API的变化,如下图所示

2.修改Body

修改requests的Body

当你要修改的请求内容是json数据时,就选择修改Body

配置方法如下图,将json数据直接粘贴过来修改

修改response的Body,下图是需要匹配的内容

所需要替换的内容中有空格,直接在charles中敲入空格的话,匹配不到,需要用到正则表达式才可匹配,/s表示空白字符(空格、换行、tab缩进等),*代表0个或多个

3.修改query param

如何查看你要修改的是否是query param?下图中,你要修改数据在query string中的时候,就要修改query param

4.修改url

附录:

正则可视化工具 https://regexper.com/

一个示例:

顺序优先级:

上面的匹配结果,按照上面的location写法,以下的匹配示例成立:

直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,这里是直接转发给后端应用服务器了,也可以是一个静态首页:

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用。

例如 http://aaa.com/a/we/index.php?id=1&u=str 只对/a/we/index.php重写。语法rewrite regex replacement [flag]

如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。

表明看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:

如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。

因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301、302的原因了。这里last和break区别有点难以理解:

语法为if(condition){…},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容:

-f 和 !-f 用来判断是否存在文件

-d 和 !-d 用来判断是否存在目录

-e 和 !-e 用来判断是否存在文件或目录

-x 和 !-x 用来判断文件是否可执行

例如:

下面是可以用作if判断的全局变量

例: http://localhost:88/test1/test2/test.php

小括号 () 之间匹配的内容,可以在后面通过 $1 来引用, $2 表示的是前面第二个 () 里的内容。正则里面容易让人困惑的是 \ 转义特殊字符。

例1:

对形如 /images/ef/uh7b3/test.png 的请求,重写到 /data?file=test.png ,于是匹配到 location /data ,先看 /data/images/test.png 文件存不存在,如果存在则正常响应,如果不存在则重写 tryfiles 到新的 image404 location ,直接返回404状态码。

例2:

对形如 /images/bla_500x400.jpg 的文件请求,重写到 /resizer/bla.jpg?width=500&height=400 地址,并会继续尝试匹配 location 。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/58900.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-27
下一篇2023-02-27

发表评论

登录后才能评论

评论列表(0条)

    保存