拦截网页中ajax请求,在响应前修改数据

来源:赵克立博客 分类: 前端开发 标签:拦截抓包发布时间:2022-10-25 19:22:06最后更新:2022-10-25 20:16:28浏览:671
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2022-10-25 20:16:28
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

一些原因需要对页面中的ajax请求进行拦截,修改响应内容后再放行。原理为替换(hook)页面中ajax请求对象的请求来响应回调,如下

(function () {
    function modifyResponse(response) {

        var original_response, modified_response;

        if (this.readyState === 4) {
            console.log(this.requestURL, this.requestMethod);
            // 使用在 openBypass 中保存的相关参数判断是否需要修改
            // if (this.requestUrl ... && this.requestMethod ...) {
            original_response = response.target.responseText;
            Object.defineProperty(this, "responseText", {writable: true});
            modified_response = JSON.parse(original_response);
            // 根据 sendBypass 中保存的数据修改响应内容
            this.responseText = JSON.stringify(modified_response);
            // }
        }
    }

    function openBypass(original_function) {

        return function (method, url, async) {
            // 保存请求相关参数
            this.requestMethod = method;
            this.requestURL = url;

            this.addEventListener("readystatechange", modifyResponse);
            return original_function.apply(this, arguments);
        };

    }

    function sendBypass(original_function) {
        return function (data) {
            // 保存请求相关参数
            this.requestData = data;
            return original_function.apply(this, arguments);
        };
    }

    XMLHttpRequest.prototype.open = openBypass(XMLHttpRequest.prototype.open);
    XMLHttpRequest.prototype.send = sendBypass(XMLHttpRequest.prototype.send);
})();

以上代码在页面上执行过后,页面中所有ajax请求都会经过这里


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python