🏠 

Greasy Fork is available in English.

XHS

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