您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
HttpRequest for any type of request and HttpRequestHTML to request webpage. Supports caching of responses to handle status 304.
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/405144/818460/HttpRequest.js
// ==UserScript== // @name HttpRequest // @namespace hoehleg.userscripts.private // @version 0.1 // @description HttpRequest for any type of request and HttpRequestHTML to request webpage. Supports caching of responses to handle status 304. // @author Gerrit Höhle // // @grant GM_xmlhttpRequest // // @require https://gf.qytechs.cn/scripts/405143-simplecache/code/SimpleCache.js // @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js // // ==/UserScript== /* jshint esnext: true */ /* globals SimpleCache, $, jQuery */ const HttpRequest = (() => { const responsesCache = new SimpleCache({ keyExtractor: (httpRequest) => [ httpRequest.method, httpRequest.url, httpRequest.headers, httpRequest.data, httpRequest.params ].join() }); const urlWithParams = (url, paramsObject) => { const params = Object.entries(paramsObject).map(([key, value]) => key + '=' + value).join('&'); return (url.length > 0) ? url + '?' + params : params; }; return class HttpRequest { constructor({ method, url = window.location.href, headers = {}, data = '', keepInCacheTimoutMs = 10 * 60000, params = {} } = {}) { Object.assign(this, { method, url, headers, data, keepInCacheTimoutMs, params }); } send() { return new Promise((resolve, reject) => { const method = this.method.toUpperCase(); let url = this.url; let headers = this.headers; let data = this.data; const onload = (response) => { switch (response.status) { case 200: if (this.keepInCacheTimoutMs > 0) { responsesCache.set(this, response, this.keepInCacheTimoutMs); } break; case 304: if (this.isCached()) { response = this.getFromCache(); response.status = 304; } break; default: reject(Error(`Status: ${response.status}, Error: ${response.statusText}`)); return; } resolve(response); }; const onerror = () => { reject(Error('network error')); }; switch (method) { case 'GET': if (this.params) { url = urlWithParams(url, this.params); } break; case 'POST': case 'PUT': headers = Object.assign({ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, headers || {}); if (this.params) { data = urlWithParams(data, this.params); } break; } GM_xmlhttpRequest({ method, url, onload, onerror: this.onError, headers: this.headers, data }); }); } isCached() { return responsesCache.has(this); } getFromCache() { return responsesCache.get(this); } static send(...args) { return new HttpRequest(...args).send(); } }; })(); class HttpRequestHtml extends HttpRequest { constructor({ url, method = "GET", headers, data, keepInCacheTimoutMs, params } = {}) { super({ method, url, headers, data, keepInCacheTimoutMs, params }); } send() { return super.send().then(response => new Promise(resolve => { if (response.status == 200) { response.html = new DOMParser().parseFromString(response.responseText, 'text/html'); resolve(response); } })); } static send(...args) { return new HttpRequestHtml(...args).send(); } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址