油猴脚本高级应用:拦截与修改网页Fetch请求实战指南

油猴脚本高级应用:拦截与修改网页Fetch请求实战指南

简介:

本文介绍了几个使用油猴(Tampermonkey)脚本拦截和修改网页 fetch 请求的案例。这些脚本可以在浏览器扩展油猴中运行,用于开发者调试网络请求或自定义页面行为。

核心内容:

  1. fetch 拦截案例2:通过覆盖原生 fetch 函数,拦截请求并修改响应的 json 方法,添加自定义属性 hook。但此方法可能会漏掉一些请求。
  2. fetch 拦截案例1:同样覆盖原生 fetch,但通过检查请求的URL,只拦截特定域名(如 bilivideo.com)的请求,其他请求正常放行,避免误拦截。
  3. 国外大神脚本:一个示例脚本框架,展示了油猴脚本的基本结构和元数据,包括运行时机、脚本名称、描述、作者信息等。此脚本实际功能尚未实现,但提供了一个扩展和自定义的起点。

使用场景:

  • 网络调试:开发者可以在开发过程中使用这些脚本来拦截和分析网络请求,方便定位问题。
  • 页面自定义:用户可以通过修改响应数据,实现对网页内容的个性化定制。
  • 学习参考:油猴脚本的示例为学习如何使用油猴扩展和JavaScript进行浏览器自动化提供了参考。

注意事项:

  • 脚本运行时机(@run-at)设置为 document-start,确保尽早覆盖原生函数。
  • 使用 @grant unsafeWindow 声明,授予脚本访问或修改全局窗口对象的权限。
  • 脚本可能需要根据实际网页结构和需求进行调整和完善。

fetch 拦截请求案例2(会漏掉一些请求)

// @run-at    document-start
// @grant     unsafeWindow
(function () {    let oldfetch = fetch;function fuckfetch() {return new Promise((resolve, reject) => {//console.log("arguments",arguments)oldfetch.apply(this, arguments).then(response => {const oldJson = response.json;console.log(response.url)response.json = function() {return new Promise((resolve, reject) => {oldJson.apply(this, arguments).then(result => {result.hook = 'success';resolve(result);});});};resolve(response);});});}unsafeWindow.fetch = fuckfetch;})();

fetch 拦截请求案例1(会漏掉一些请求)

把运行时间设置为document-start,确保能拦截到较早发出的请求。

这里我通过url判断是否为获取b站直播流的请求,如果不是则不拦截,避免误伤。

// @run-at    document-start
// @grant     unsafeWindow
(function () {    const originFetch = fetch;unsafeWindow.fetch = (...arg) => {console.log('fetch arg', ...arg);if (arg[0].indexOf('bilivideo.com') > -1) {//console.log('拦截直播流')return new Promise(() => {throw new Error();});} else {//console.log('通过')return originFetch(...arg);}}
})();

国外大神的脚本(最能拦截所有)

来自国外大神的脚本,直接执行即可

// ==UserScript==
// @run-at    document-start
// @name         CSDN-创作中心
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       wusp
// @match        https://mp.csdn.net/*
// @exclude		   这个和 iclude 配合使用,排除匹配到的网址,优先于 include
// @require      http://code.jquery.com/jquery-1.11.0.min.js
// @grant        unsafeWindow
// ==/UserScript==(function () {'use strict';$(() => { function addXMLRequestCallback(callback){// 是一个劫持的函数var oldSend, i;if( XMLHttpRequest.callbacks ) {//   判断XMLHttpRequest对象下是否存在回调列表,存在就push一个回调的函数// we've already overridden send() so just add the callbackXMLHttpRequest.callbacks.push( callback );} else {// create a callback queueXMLHttpRequest.callbacks = [callback];// 如果不存在则在xmlhttprequest函数下创建一个回调列表// store the native send()oldSend = XMLHttpRequest.prototype.send;// 获取旧xml的send函数,并对其进行劫持// override the native send()XMLHttpRequest.prototype.send = function(){// process the callback queue// the xhr instance is passed into each callback but seems pretty useless// you can't tell what its destination is or call abort() without an error// so only really good for logging that a request has happened// I could be wrong, I hope so...// EDIT: I suppose you could override the onreadystatechange handler thoughfor( i = 0; i < XMLHttpRequest.callbacks.length; i++ ) {XMLHttpRequest.callbacks[i]( this );}// 循环回调xml内的回调函数// call the native send()oldSend.apply(this, arguments);//    由于我们获取了send函数的引用,并且复写了send函数,这样我们在调用原send的函数的时候,需要对其传入引用,而arguments是传入的参数}}}// e.g.addXMLRequestCallback( function( xhr ) {// 调用劫持函数,填入一个function的回调函数// 回调函数监听了对xhr调用了监听load状态,并且在触发的时候再次调用一个function,进行一些数据的劫持以及修改xhr.addEventListener("load", function(){if ( xhr.readyState == 4 && xhr.status == 200 ) {console.log( xhr.responseURL );}});});})
})();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 前端修改页面标题无需重新打包即可生效

在public文件夹下创建config.js文件 index.html页面修改 其他页面的标题都可以用window.title来引用就可以了&#xff01;

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】认证服务03—分布式下Session共享问题

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】分布式下Session共享问题 session原理分布式下session共享问题Session共享问题解决—session复制Session共享问题解决—客户端存储Session共享问题解决—hash一致性Session共享问题…

ASUS/华硕飞行堡垒8 FX506L FX706L系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;Windows10 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…

域名、网页、HTTP概述

目录 域名 概念 域名空间结构 域名注册 网页 概念 网站 主页 域名 HTTP URL URN URI HTML 超链接 发布 HTML HTML的结构 静态网页 特点 动态网页 特点 Web HTTP HTTP方法 GET方法 POST方法 HTTP状态码 生产环境下常见的HTTP状态码 域名 概念 IP地…

基于.NET开源游戏框架MonoGame实现的开源项目合集

前言 今天分享一些基于.NET开源游戏框架MonoGame实现的开源项目合集。 MonoGame项目介绍 MonoGame是一个简单而强大的.NET框架&#xff0c;使用C#编程语言可以创建桌面PC、视频游戏机和移动设备游戏。它已成功用于创建《怒之铁拳4》、《食肉者》、《超凡蜘蛛侠》、《星露谷物…

【跟我学K8S】45天入门到熟练详细学习计划

目录 一、什么是K8S 核心功能 架构组件 使用场景 二、入门到熟练的学习计划 第一周&#xff1a;K8s基础和概念 第二周&#xff1a;核心对象和网络 第三周&#xff1a;进阶使用和管理 第四周&#xff1a;CI/CD集成和监控 第五周&#xff1a;实战模拟和案例分析 第六周…

XPointer 实例

XPointer 实例 1. 引言 XPointer 是一种用于定位 XML 文档中特定部分的语言。它是 XLink 的补充,允许用户在 XML 文档中创建链接,指向文档中的特定元素、属性或文本。XPointer 的强大之处在于其精确的定位能力,使得开发者能够创建更加丰富和动态的 XML 应用。 2. XPointe…

【Spring Boot】spring boot主启动类_内置服务

1、主启动类 1.1 定义与功能 Spring Boot的主启动类是一个特殊的Java类&#xff0c;用于启动Spring Boot应用程序。该类通常使用SpringBootApplication注解进行标注&#xff0c;这个注解是一个复合注解&#xff0c;包含SpringBootConfiguration、EnableAutoConfiguration和Co…

LRU Cache 双向链表以及STL list实现----面试常考

双向链表版本&#xff1a; #include <bits/stdc.h> using namespace std; struct Node{int key, value;Node* prev;Node* next;Node():key(0), value(0), prev(nullptr), next(nullptr){}Node(int k, int v):key(k), value(v), prev(nullptr), next(nullptr){} }; class…

【IT领域新生必看】Java中的对象创建魔法:小白也能掌握的五种方法

文章目录 引言为什么需要创建对象&#xff1f;创建对象的五种常见方式1. 使用 new 关键字示例&#xff1a; 2. 使用反射示例&#xff1a; 3. 使用克隆示例&#xff1a; 4. 使用序列化和反序列化示例&#xff1a; 5. 使用工厂方法示例&#xff1a; 选择合适的对象创建方式总结 引…

Spring容器Bean之XML配置方式

一、首先看applicationContext.xml里的配置项bean 我们采用xml配置文件的方式对bean进行声明和管理&#xff0c;每一个bean标签都代表着需要被创建的对象并通过property标签可以为该类注入其他依赖对象&#xff0c;通过这种方式Spring容器就可以成功知道我们需要创建那些bean实…

IPython代码块粘贴秘籍:效率与技巧的完美结合

标题&#xff1a;IPython代码块粘贴秘籍&#xff1a;效率与技巧的完美结合 在数据科学和Python编程的日常实践中&#xff0c;经常需要在IPython环境中快速有效地粘贴代码块。这个过程虽小&#xff0c;却对提升工作效率至关重要。本文将详细介绍如何在IPython中粘贴代码块&…

comsol随机材料参数赋值

comsol随机材料参数赋值 在comsol中定义外部matlab函数 在comsol中定义外部matlab函数 首选项&#xff0c;安全性&#xff0c;允许 材料中&#xff0c;将杨氏模量更改为变量函数 计算 应力有波动&#xff0c;可见赋值成功 也可以看到赋值的材料参数&#xff1a;

植物大战僵尸杂交版V2.1+修改器+融合版

植物大战僵尸杂交版v2.1 新增新植物&#xff0c;全新模式与玩法&#xff01; 内含窗口放大工具与修改器 主播同款游戏&#xff0c;下载使用即可&#xff01; 链接: https://pan.baidu.com/s/1znjbqgBSdqTJWZLBOhe5hA?pwdj6ra 提取码: j6ra

vulnhub--IMF

环境 攻击机&#xff1a;192.168.96.4 靶机&#xff1a;ip未知 主机探测 确定靶机ip为32的主机 端口扫描 访问80端口 外围打点 在contact.php页面源码中找到了flag1 之后没啥突破 但查看网络后发现contact.php页面请求的三个js文件的文件名很有特点&#xff0c;猜测是base64编码…

模型优化调参利器贝叶斯优化bayesian-optimization实践

早在之前很多项目尤其是预测类型的项目中&#xff0c;就已经比较广泛地在实用贝叶斯优化库了&#xff0c;这是一个非常出色的纯python实现的项目&#xff0c;地址在这里&#xff0c;如下所示&#xff1a; 写这篇文章主要有两个目的&#xff0c;一方面是觉得这个工具库挺不错的值…

零基础做项目---五子棋对战---day01

创建项目 这里使用阿里云服务器 https://start.aliyun.com/ 勾选 MyBatis Framework (在SQL分类下)MySQL Driver (在SQL分类下)WebSocket (在Messaging分类下)Spring Web (在Web分类下) 项目结构 消息发送机制 按照当前已有的知识&#xff0c;主要是HTTP HTTP自身是难以实现这…

c++ 里如何检测内存泄露:比如用了 new ,但没有用 delete

&#xff08;1 方法一&#xff09; 用 MFC 框架的 F5 不带断点的调试。可以在输出窗口提示是否有内存泄露。 &#xff08;2 方法二&#xff09; &#xff0c;在 main 函数中添加如下代码&#xff0c;用 F5 不带断点的调试&#xff1a; int main() {_CrtSetDbgFlag( _CRTDBG_A…

vue.js微商城后台管理系统

一.需要运行的效果 20240701-231456 二.代码&#xff08;解析&#xff09; 首先&#xff0c;为项目添加依赖&#xff1a; yarn add element-plus --save yarn vue-router4 --save 新建一个项目包&#xff0c;然后命名为商品管理&#xff0c;在components中新建几个vue文件。 …

React Hooks 深度解析

Hooks简介 诞生背景&#xff1a; 在React 16.8之前的版本中&#xff0c;组件主要分为函数组件和类组件两大类。函数组件简单轻量&#xff0c;但不支持状态&#xff08;state&#xff09;和生命周期方法&#xff1b;而类组件虽然功能强大&#xff0c;但编写和维护起来相对复杂。…