油猴腳本高級應用:攔截與修改網頁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.pswp.cn/web/40517.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40517.shtml
英文地址,請注明出處:http://en.pswp.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;但編寫和維護起來相對復雜。…