Greasy Fork is available in English.

XHS

XML Http Sniffer

Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/443537/1041211/XHS.js

// ==UserScript==
// @name         XHS
// @license      MIT
// @version      1.2
// @description  XML Http Sniffer
// @author       0vC4
// @match        http://*/*
// @match        https://*/*
// @grant        none
// @run-at       document-start
// @namespace    https://greasyfork.org/users/670183
// ==/UserScript==





const XHS = (() => {
    const xhs = window.xhs || {};
    if (xhs.xhr) return xhs;
    
    
    
    
    
    const pipe = (type, ...next) => function() {
        for (const hook of xhs.hooks.sort((a, b) => b.priority - a.priority)) {
            if (!hook[type]) continue;
            if (!arguments) break;
            arguments = hook[type].call(this, ...arguments);
        }
        
        if (!arguments) return;
        next.flat().forEach(func => func.call(this, ...arguments));
    };
    
    
    
    
    
    const proto = XMLHttpRequest.prototype;
    xhs.xhr = XMLHttpRequest;
    xhs.open = proto.open;
    xhs.send = proto.send;
    
    xhs.hooks = [];
    xhs.setHook = hook => {
        xhs.hooks.push(hook);
        return xhs;
    };
    xhs.setHooks = (...hooks) => {
        xhs.hooks.push(...hooks.flat());
        return xhs;
    };
    
    
    
    
    
    proto.open = function() {
        const [method, url] = arguments;
        Object.assign(this, { method, url });
        pipe('open', xhs.open).call(this, ...arguments);
    };
    
    
    
    
    
    proto.send = function() {
        this._onload = this.onload || (() => 0);
        
        this.onload = function() {
            Object.defineProperty(this, 'response', {
              enumerable: true,
              configurable: true,
              writable: true,
              value: this.response,
            });
            
            pipe('onload', this._onload).call(this, ...arguments);
        };
        
        pipe('send', xhs.send).call(this, ...arguments);
    };
    
    
    
    
    
    return xhs;
})();
// 0vC4#7152