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;