From 6cedde4c4e7443f85375547ff660b87cae2b2ad4 Mon Sep 17 00:00:00 2001 From: Skyxim <70276018+Skyxim@users.noreply.github.com> Date: Wed, 15 Sep 2021 22:35:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E9=98=85=E6=96=B0=E5=A2=9E=20User-Age?= =?UTF-8?q?nt=20=E9=80=89=E9=A1=B9=EF=BC=8C=E5=85=81=E8=AE=B8=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=20UA=EF=BC=8C=E9=BB=98=E8=AE=A4=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20QuantumultX=20UA=20=E4=BB=A5=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/sub-store.js | 23 ++++++++++++++--------- web/src/views/SubEditor.vue | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/backend/sub-store.js b/backend/sub-store.js index f952418..1d2033d 100644 --- a/backend/sub-store.js +++ b/backend/sub-store.js @@ -773,10 +773,10 @@ function service() { } async function refreshCache(req, res) { - const {url} = req.body; + const { url, ua } = req.body; $.info(`Refreshing cache for URL: ${url}`); try { - const raw = await getResource(url, false); + const raw = await getResource(url, false, ua); $.write(raw, `#${Base64.safeEncode(url)}`); res.json({ status: "success", @@ -871,11 +871,16 @@ function service() { } // get resource, with cache ability to speedup response time - async function getResource(url, useCache = true) { - // use QX agent to get flow headers + async function getResource(url, useCache = true, userAgent) { + // use QX agent to get flow headers ,if not assign user-agent + let ua = userAgent + if (typeof userAgent == "undefined" || userAgent == null || userAgent.trim().length == 0) { + ua = "Quantumult%20X" + } + const $http = HTTP({ headers: { - "User-Agent": "Quantumult%20X", + "User-Agent": ua, }, }); const key = "#" + Base64.safeEncode(url); @@ -915,7 +920,7 @@ function service() { ) { if (type === "subscription") { const sub = item; - const raw = await getResource(sub.url, useCache); + const raw = await getResource(sub.url, useCache, sub.ua); // parse proxies let proxies = ProxyUtils.parse(raw); if (!noProcessor) { @@ -945,7 +950,7 @@ function service() { }% ` ); try { - const raw = await getResource(sub.url, useCache); + const raw = await getResource(sub.url, useCache, sub.ua); // parse proxies let currentProxies = ProxyUtils.parse(raw); if (!noProcessor) { @@ -1379,13 +1384,13 @@ var ProxyUtils = (function () { let paramArr = line.split("?") let sni=null if (paramArr.length > 1) { - paramArr=paramArr[1].split("#")[0].split("&") + paramArr = paramArr[1].split("#")[0].split("&") const params = new Map(paramArr.map((item) => { return item.split("=") })) sni = params.get("sni") } - + return { name: name || `[Trojan] ${server}`, // trojan uri may have no server tag! type: "trojan", diff --git a/web/src/views/SubEditor.vue b/web/src/views/SubEditor.vue index 3c96333..d43f6c1 100644 --- a/web/src/views/SubEditor.vue +++ b/web/src/views/SubEditor.vue @@ -49,6 +49,16 @@ /> + 0) { + output.ua = ua; + }else{ + output.ua="" + } // useless filter if (this.options.useless === 'REMOVE') { output.process.push({ @@ -573,6 +591,7 @@ function loadProcess(options, source, isCollection = false) { ...options, name: source.name, icon: source.icon, + ua: source.ua }; if (isCollection) { options.subscriptions = source.subscriptions;