hijack-xhr

1/26/2025, 1:35:29 PM

// ==UserScript==
// @name        hijack-xhr
// @namespace   Violentmonkey Scripts
// @match       *://*/*
// @grant       none
// @version     1.0
// @author      maanimis
// @description 1/26/2025, 1:35:29 PM
// @run-at      document-end
// @license MIT
// ==/UserScript==

(function() {
    const originalOpen = XMLHttpRequest.prototype.open;
    const originalSend = XMLHttpRequest.prototype.send;
    const originalSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;

    XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
        this._requestData = { method, url, headers: {} };
        return originalOpen.apply(this, arguments);
    };

    XMLHttpRequest.prototype.setRequestHeader = function(header, value) {
        this._requestData.headers[header] = value;
        return originalSetRequestHeader.apply(this, arguments);
    };

    XMLHttpRequest.prototype.send = function(body) {
        this._requestData.body = body;

        this.addEventListener("load", function() {
            console.log("XHR Request:", this._requestData);
            console.log("XHR Response:", {
                status: this.status,
                statusText: this.statusText,
                headers: this.getAllResponseHeaders(),
                response: this.response
            });
        });

        return originalSend.apply(this, arguments);
    };
})();