比fiddler简单,浏览器端的拦截方案,请求参数篡改,响应返回值篡改,请求和响应的拦截注入,请求前的二次确认

背景

  1. 查询加参数了,依赖前端写完界面测试?或者维护postman之类的工具,有点难受。
  2. 有些值依赖前一个请求,比如查看列表,然后查看详情,用postman费劲。
  3. 产品或者测试压根不熟悉postman

目标

我们需要一款能再页面发请求时弹出来参数让你修改,让你进行二次确认的操作,返回值也是同样。

需要一款简单易用的请求修改器,融合页面,和页面相辅相成最好,在需要时触发,不用时关闭,

需找方法

  1. 利用浏览器扩展实现?刚开始我确实是这样想的,我尝试利用浏览器的特定API 如:chrome.webRequest.onBeforeRequest.addListener
    但走下去发现是一个死胡同,这个API不支持暂停,无法处理异步请求,返回值操作也累等问题叠加起来,让我在这个问题上对它没啥好感。

  2. 最终我选择了利用几个冷门方法,XMLHttpRequest prompt
    本质上我们想要暂停,js能暂停主线程的函数只有不常用的几个api,如XMLHttpRequest中设置为同步时,执行send方法会暂停等待返回值,
    alertconfirmprompt这三个弹框也会暂停,等待用户反馈。

思路

  1. 重写XMLHttpRequest类,或者重写XMLHttpRequest类的open和send方法
  2. 执行open或者send方法时,获取到参数,调用prompt,将请求的参数打印上去,让用户修改。
  3. 拦截 responseText ,调用prompt,将用原始responseText打印上去让用户修改,暂存起来,用户触发responseText的getter时,给它一份假的。

具体实现

/*请求响应修改器1.0*/class HttpRequest extends window.XMLHttpRequest{
    constructor(){
        super(...arguments);
        this._url="";
        this._params="";
        this.onreadystatechange=null;
        let responseText="";
        Object.defineProperty(this,"responseText",{
            get() {
                return responseText
            },
            set(v) {
                responseText=v
            }
        })
    }
    send(){
        const arr=[...arguments];
        if(arr[0]){
            const params = window.prompt(`———————————— 接口地址 ————————————\n${this._url}\n————————————    参数    ————————————\n${_deCode(arr[0]).join("\n")}`,arr[0]);
            if(params!==null){
                arr[0]=params
            }
        }
        return super.send(...arr)
    }
    open(){
        const arr= [...arguments];
        const url=arr[1];
        if(url){
            const [path,params]=url.split(/\?/);
            this._url = path;
            this._params = params;
            if(this._params){
                const params = window.prompt(`———————————— 接口地址 ————————————\n${this._url}\n————————————    参数    ————————————\n${_deCode(this._params).join("\n")}`,this._params);
                if(params!==null){
                    arr[1]=this._url+"?"+params
                }
            }
        }
        let fn = this.onreadystatechange;
        Object.defineProperty(this,"onreadystatechange",{
            set(v) {
                fn=v;
            }
        });
        super.onreadystatechange=()=>{
            if(this.readyState===4&&this.status===200){
                const responseText = super.responseText;
                if(responseText){
                    const res = window.prompt(`———————————— 接口地址 ————————————\n${this._url}\n————————————  返回值  ————————————\n${responseText.slice(0,50)+(responseText.length>50?'...':"")}`,responseText);
                    if(res!==null){
                        this.responseText=res
                    }else {
                        this.responseText=super.responseText
                    }
                }else {
                    this.responseText=super.responseText
                }
            }
            if(fn)fn();
        };
        return super.open(...arr)
    }
}
function _deCode(params){
    return params.split("&").map((a)=>{
        const [key,value]=a.split("=");
        if(!key)return "";
        return decodeURIComponent(key)+"="+decodeURIComponent(value)
    })
}
window.XMLHttpRequest=HttpRequest;

如何使用上述脚本

  1. 如下图所示
  2. 按下F12键,呼出控制台,打印source标签页
  3. 打开snippet标签页
  4. 新增一个代码段
  5. 在右侧空白区域输入上面的代码
  6. 点击执行即可 (后续所有请求即可都拦截了)

上述除了第五步之外,只需要操作一次,后续只需要打开F12,执行即可。

理论上来说,可以支持几乎所有网站的请求,除非他不用 XMLHttpRequest 有些网站执行没反应是因为iframe嵌套的问题,在console控制台切换下iframe即可,还是不行的话就刷新重试下,也可以评论区反馈。
在这里插入图片描述

功能展示

请求修改展示

在这里插入图片描述

返回值修改展示

在这里插入图片描述

总结

功能简单易上手,效果还是不错的,至少我们组的产品和测试,开发反馈说不错。

结束语:如果遇到了问题,欢迎在评论区交流,如果觉得不错,可以点赞和收藏,持续更新。

  1. 博客中标注原创的文章,版权归原作者 苦中作乐才是人生巅峰所有;
  2. 转载或者引用本文内容请注明来源及原作者;
  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Fiddler是一个功能强大的网络调试工具,可以帮助你拦截、修改和监视网络请求响应。下面是使用Fiddler 4.0修改请求响应的一般步骤: 1. 安装和启动Fiddler:首先,你需要下载并安装Fiddler 4.0版本。安装完成后,启动Fiddler。 2. 配置浏览器代理:为了让Fiddler能够拦截浏览器请求响应,你需要配置浏览器使用Fiddler作为代理。在Fiddler中的"Tools"菜单下选择"Options",在弹出的窗口中选择"Connections"选项卡,勾选"Allow remote computers to connect"和"Act as system proxy on startup"选项,并点击"OK"保存设置。 3. 拦截和修改请求:打开浏览器,访问你想要调试的网站。在Fiddler中,你会看到捕获到的请求响应。找到你想要修改的请求,右键点击该请求并选择"Edit Request"。在弹出的编辑窗口中,你可以修改请求的URL、Headers、Body等信息。完成修改后,点击"Save"保存修改。 4. 拦截和修改响应:类似地,你也可以拦截和修改服务器返回的响应。找到你想要修改的响应,右键点击该响应并选择"Edit Response"。在弹出的编辑窗口中,你可以修改响应的Headers、Body等信息。完成修改后,点击"Save"保存修改。 5. 查看和保存修改结果:在Fiddler中,你可以查看修改后的请求响应。同时,你也可以保存修改后的请求响应,以便后续使用或分析。 需要注意的是,Fiddler只能拦截和修改通过代理访问的请求响应。所以确保你已正确配置浏览器代理以及其他需要使用Fiddler的应用程序。 这只是一个简单的介绍,Fiddler还有很多其他功能和高级用法,你可以通过官方文档和其他资源来进一步学习和了解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值