拦截网页中的 Fetch 和 XMLHttpRequest 请求方式方法
创作时间:
作者:
@小白创作中心
拦截网页中的 Fetch 和 XMLHttpRequest 请求方式方法
引用
CSDN
1.
https://blog.csdn.net/weixin_44786530/article/details/146250102
本文介绍如何拦截网页中的 Fetch 和 XMLHttpRequest 请求,并捕获它们的响应体内容。通过这种方式,你可以在控制台中查看这些请求的响应数据,或者进一步处理这些数据(例如发送到后台或存储起来)。
整体结构
(function() {
// 代码逻辑
})();
这是一个 立即执行函数表达式 (IIFE),用于创建一个独立的作用域,避免变量污染全局环境。
拦截 Fetch 请求
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;
});
};
代码解释:
- 保存原始的 Fetch 方法
var originalFetch = window.fetch;
将浏览器原生的 fetch
方法保存到 originalFetch
变量中,以便后续调用。
- 重写 Fetch 方法
window.fetch = function() {
return originalFetch.apply(this, arguments).then(response => {
// 拦截逻辑
});
};
重写 window.fetch
方法,使其在每次调用时执行自定义逻辑。
- 克隆响应并读取响应体
response.clone().text().then(body => {
console.log("1024小神 Fetched body:", body);
});
response.clone()
:克隆响应对象,因为响应体只能读取一次。response.text()
:将响应体解析为文本。console.log
:将响应体内容打印到控制台。
- 返回原始响应
return response;
确保原始的 fetch
调用不受影响,返回原始的响应对象。
拦截 XMLHttpRequest 请求
var originalXHROpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
this.addEventListener("load", function() {
console.log("1024小神 response:", this.responseText);
// 这里可以处理响应体内容,比如发送给后台或者存储起来
});
originalXHROpen.apply(this, arguments);
};
代码解释:
- 保存原始的 XMLHttpRequest.open 方法
var originalXHROpen = XMLHttpRequest.prototype.open;
将浏览器原生的 XMLHttpRequest.prototype.open
方法保存到 originalXHROpen
变量中,以便后续调用。
- 重写 XMLHttpRequest.open 方法
XMLHttpRequest.prototype.open = function() {
// 拦截逻辑
originalXHROpen.apply(this, arguments);
};
重写 XMLHttpRequest.prototype.open
方法,使其在每次调用时执行自定义逻辑。
- 监听请求完成事件
this.addEventListener("load", function() {
console.log("1024小神 response:", this.responseText);
});
- 当请求完成时(
load
事件触发),打印响应体内容(this.responseText
)到控制台。
- 调用原始的 open 方法
originalXHROpen.apply(this, arguments);
确保原始的 open
方法逻辑不受影响。
代码的作用
Fetch 拦截:
每次调用
fetch
时,捕获响应体内容并打印到控制台。你可以进一步处理响应体内容,例如发送到后台或存储起来。
XMLHttpRequest 拦截:
每次调用
XMLHttpRequest
时,捕获响应体内容并打印到控制台。同样可以进一步处理响应体内容。
示例输出
假设页面中有一个 Fetch 请求和一个 XMLHttpRequest 请求:
- Fetch 请求的响应体是
{ "name": "1024小神" }
。 - XMLHttpRequest 请求的响应体是
Hello, World!
。
控制台输出:
1024小神 Fetched body: { "name": "1024小神" }
1024小神 response: Hello, World!
注意事项
- CORS 限制:
- 如果目标网站启用了 CORS 保护,可能无法直接访问响应体。
- 性能影响:
- 拦截所有请求可能会影响页面性能,建议按需过滤。
- 响应体类型:
response.text()
适用于文本类型的响应体。如果是 JSON 或二进制数据,可以使用response.json()
或response.blob()
。
总结
这段代码通过重写 fetch
和 XMLHttpRequest
方法,实现了对网页请求的拦截和响应体内容的捕获。你可以在此基础上扩展功能,例如将捕获的数据发送到后台或存储起来。
热门推荐
赣事新说|这里,30多名院士、博士都放弃了行政级别
鸡啄蛋有什么解决办法?鸡啄蛋用什么料来改善?养鸡人快来学
世界十大名贵石斑鱼
胰岛素周制剂——糖友治疗新选择
新疆喀什的位置有多重要?周围居然有八个首都,结合地图了解一下
糖尿病患者尿常规肾功能正常还需查微量白蛋白吗?医生这样说
手机进水后的应急处理指南:关机、除水、干燥与维修建议
深度解读:中年危机的真相与应对策略
为什么团队合作的重要性不可忽视?探索其对成功的关键影响
英国租房热点大揭秘,四年房租上涨超40%!未来走势如何?
中型淡水观赏鱼的种类及养殖技巧详解
探讨VIE架构的合法性:全球视角下的考量
有丝分裂和减数分裂的区别对比
2025年高考四大改革政策解读:复读生、英语科目、院校批次等全面调整
成年男性每天摄入热量:科学指南
爱情对人生的意义:十大维度全面解析
行政诉讼起诉流程图:一份详细的诉讼指南
吹空调感冒是风寒还是风热
债基适合长期持有吗?帮你弄懂三大问题
厌氧氨氧化污水处理技术
双鱼座恋爱脑最明显:揭开TA们为爱痴狂的秘密
一尊酹江月,得失寸心知——从“酹”字解读苏轼《念奴娇·赤壁怀古》的情感
插画的高级感如何体现,尽量精简构图、配色不能过多
奴隶制引发的时代纷争:社会、经济及文化影响
中西合璧降压妙方:天麻钩藤饮
坏消息,斯特劳瑟在掘金惜败凯尔特人比赛中一瘸一拐地离开了球场
增材制造Gyroid多孔结构混合梯度对力学及失效特性的影响
全面了解股票分红、扣税、除权除息规则:XD、XR、DR
人体解剖学基础 | 膝关节
四川冬季滑雪胜地与特色玩雪景点一览:热门推荐与深度游指南