Greasy Fork is available in English.
XML Http Sniffer
此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @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