拦截网页中的 Fetch 和 XMLHttpRequest 请求方式方法

devtools/2025/3/16 0:01:10/

拦截网页中的 Fetch 和 XMLHttpRequest 请求,并捕获它们的响应体内容。通过这种方式,你可以在控制台中查看这些请求的响应数据,或者进一步处理这些数据(例如发送到后台或存储起来)。

以下是代码的逐行解释:


1. 整体结构

javascript">(function() {// 代码逻辑
})();

这是一个 立即执行函数表达式 (IIFE),用于创建一个独立的作用域,避免变量污染全局环境。


2. 拦截 Fetch 请求

javascript">var originalFetch = window.fetch;
window.fetch = function() {return originalFetch.apply(this, arguments).then(response => {response.clone().text().then(body => {console.log("1024小神 Fetched body:", body);// 这里可以处理响应体内容,比如发送给后台或者存储起来});return response;});
};
解释:
  1. 保存原始的 Fetch 方法

    javascript">var originalFetch = window.fetch;
    

    将浏览器原生的 fetch 方法保存到 originalFetch 变量中,以便后续调用。

  2. 重写 Fetch 方法

    javascript">window.fetch = function() {return originalFetch.apply(this, arguments).then(response => {// 拦截逻辑});
    };
    

    重写 window.fetch 方法,使其在每次调用时执行自定义逻辑。

  3. 克隆响应并读取响应体

    javascript">response.clone().text().then(body => {console.log("1024小神 Fetched body:", body);
    });
    
    • response.clone():克隆响应对象,因为响应体只能读取一次。
    • response.text():将响应体解析为文本。
    • console.log:将响应体内容打印到控制台。
  4. 返回原始响应

    javascript">return response;
    

    确保原始的 fetch 调用不受影响,返回原始的响应对象。


3. 拦截 XMLHttpRequest 请求

javascript">var originalXHROpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {this.addEventListener("load", function() {console.log("1024小神 response:", this.responseText);// 这里可以处理响应体内容,比如发送给后台或者存储起来});originalXHROpen.apply(this, arguments);
};
解释:
  1. 保存原始的 XMLHttpRequest.open 方法

    javascript">var originalXHROpen = XMLHttpRequest.prototype.open;
    

    将浏览器原生的 XMLHttpRequest.prototype.open 方法保存到 originalXHROpen 变量中,以便后续调用。

  2. 重写 XMLHttpRequest.open 方法

    javascript">XMLHttpRequest.prototype.open = function() {// 拦截逻辑originalXHROpen.apply(this, arguments);
    };
    

    重写 XMLHttpRequest.prototype.open 方法,使其在每次调用时执行自定义逻辑。

  3. 监听请求完成事件

    javascript">this.addEventListener("load", function() {console.log("1024小神 response:", this.responseText);
    });
    
    • 当请求完成时(load 事件触发),打印响应体内容(this.responseText)到控制台。
  4. 调用原始的 open 方法

    javascript">originalXHROpen.apply(this, arguments);
    

    确保原始的 open 方法逻辑不受影响。


4. 代码的作用

  • Fetch 拦截

    • 每次调用 fetch 时,捕获响应体内容并打印到控制台。
    • 你可以进一步处理响应体内容,例如发送到后台或存储起来。
  • XMLHttpRequest 拦截

    • 每次调用 XMLHttpRequest 时,捕获响应体内容并打印到控制台。
    • 同样可以进一步处理响应体内容。

5. 示例输出

假设页面中有一个 Fetch 请求和一个 XMLHttpRequest 请求:

  • Fetch 请求的响应体是 { "name": "1024小神" }
  • XMLHttpRequest 请求的响应体是 Hello, World!

控制台输出:

1024小神 Fetched body: { "name": "1024小神" }
1024小神 response: Hello, World!

6. 注意事项

  1. CORS 限制
    • 如果目标网站启用了 CORS 保护,可能无法直接访问响应体。
  2. 性能影响
    • 拦截所有请求可能会影响页面性能,建议按需过滤。
  3. 响应体类型
    • response.text() 适用于文本类型的响应体。如果是 JSON 或二进制数据,可以使用 response.json() 或 response.blob()

总结

这段代码通过重写 fetch 和 XMLHttpRequest 方法,实现了对网页请求的拦截和响应体内容的捕获。你可以在此基础上扩展功能,例如将捕获的数据发送到后台或存储起来。


http://www.ppmy.cn/devtools/167403.html

相关文章

MySQL 与 MongoDB 的区别

文章目录 前言一、如何选择二、索引总结 前言 在当今数据驱动的世界中,数据库技术扮演着至关重要的角色,它们为应用程序提供了存储、管理和检索数据的基础设施。MySQL 和 MongoDB 作为两种广泛使用的数据库管理系统,分别代表了关系型数据库&…

视频编码中视频帧的类型解析

在视频编码领域,视频帧类型的划分是理解视频压缩、传输以及播放机制的关键基础。视频本质上是由一系列连续的图像帧组成,通过快速播放这些帧,利用人眼的视觉暂留现象产生动态影像的效果。而不同类型的视频帧在编码过程中有着各自独特的作用和…

大数据-spark3.5安装部署之standalone模式

真实工作中还是要将应用提交到集群中去执行,Standalone模式就是使用Spark自身节点运行的集群模式,体现了经典的master-slave模式。集群共三台机器,具体如下 u22server4spark: master worker u22server4spark2: worke…

C++ 中的 RTTI(Run-Time Type Information,运行时类型识别)

我来为你详细讲解 C 中的 RTTI(Run-Time Type Information,运行时类型识别),并结合你提供的参考内容进行分析和说明。 什么是 RTTI? RTTI 是 C 提供的一种机制,允许程序在运行时识别对象的类型信息。它主要…

富文本编辑器(Rich Text Editor,RTE)

富文本编辑器(Rich Text Editor,RTE)是现代Web应用中常见的工具,允许用户创建和编辑带有丰富格式的文本内容。为了更深入地理解富文本编辑器的工作原理和实现方式,我们可以结合代码进行分析。以下将从几个关键方面展开…

突破连接边界!O9201PM Wi-Fi 6 + 蓝牙 5.4 模块重新定义笔记本无线体验

在当今数字化时代,笔记本电脑已成为人们工作、学习和娱乐的必备工具。而无线连接技术,作为笔记本电脑与外界交互的关键桥梁,其性能的优劣直接关乎用户体验的好坏。当下,笔记本电脑无线连接领域存在诸多痛点,严重影响着…

【蓝桥杯集训·每日一题2025】 AcWing 5590. 沿栅栏散步 python

AcWing 5590. 沿栅栏散步 Week 4 3月11日 题目描述 农夫约翰有 N N N 头奶牛,每头奶牛都喜欢日常沿着包围牧场的栅栏散步。 栅栏由 P P P 根柱子组成( P P P 为偶数),每根柱子的位置是农夫约翰农场地图上的一个不同的二维坐…

Linux驱动开发实战(五):Qt应用程序点RGB灯(保姆级快速入门!)

Linux驱动开发实战(五):Qt应用程序点RGB灯(保姆级快速入门!) 文章目录 Linux驱动开发实战(五):Qt应用程序点RGB灯(保姆级快速入门!)前…