From ed9c26b0120ef7b4899c9766f79abd7a60bac29d Mon Sep 17 00:00:00 2001
From: 2dust <31833384+2dust@users.noreply.github.com>
Date: Sat, 22 Nov 2025 18:01:49 +0800
Subject: [PATCH] Add user agent support for subscription updates
https://github.com/2dust/v2rayNG/issues/5043
---
.../com/v2ray/ang/dto/SubscriptionItem.kt | 1 +
.../com/v2ray/ang/handler/AngConfigManager.kt | 5 +++--
.../java/com/v2ray/ang/ui/SubEditActivity.kt | 2 ++
.../main/java/com/v2ray/ang/util/HttpUtil.kt | 9 +++++++--
.../src/main/res/layout/activity_sub_edit.xml | 19 +++++++++++++++++++
.../app/src/main/res/values-ar/strings.xml | 1 +
.../app/src/main/res/values-bn/strings.xml | 1 +
.../src/main/res/values-bqi-rIR/strings.xml | 1 +
.../app/src/main/res/values-fa/strings.xml | 1 +
.../app/src/main/res/values-ru/strings.xml | 1 +
.../app/src/main/res/values-vi/strings.xml | 1 +
.../src/main/res/values-zh-rCN/strings.xml | 1 +
.../src/main/res/values-zh-rTW/strings.xml | 1 +
V2rayNG/app/src/main/res/values/strings.xml | 1 +
14 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/SubscriptionItem.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/SubscriptionItem.kt
index 8a38e6db..beac5147 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/SubscriptionItem.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/SubscriptionItem.kt
@@ -13,5 +13,6 @@ data class SubscriptionItem(
var filter: String? = null,
var intelligentSelectionFilter: String? = null,
var allowInsecureUrl: Boolean = false,
+ var userAgent: String? = null,
)
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/AngConfigManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/AngConfigManager.kt
index 320f3693..4e3619e6 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/AngConfigManager.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/AngConfigManager.kt
@@ -425,17 +425,18 @@ object AngConfigManager {
}
}
Log.i(AppConfig.TAG, url)
+ val userAgent = it.second.userAgent
var configText = try {
val httpPort = SettingsManager.getHttpPort()
- HttpUtil.getUrlContentWithUserAgent(url, 15000, httpPort)
+ HttpUtil.getUrlContentWithUserAgent(url, userAgent, 15000, httpPort)
} catch (e: Exception) {
Log.e(AppConfig.ANG_PACKAGE, "Update subscription: proxy not ready or other error", e)
""
}
if (configText.isEmpty()) {
configText = try {
- HttpUtil.getUrlContentWithUserAgent(url)
+ HttpUtil.getUrlContentWithUserAgent(url, userAgent)
} catch (e: Exception) {
Log.e(AppConfig.TAG, "Update subscription: Failed to get URL content with user agent", e)
""
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt
index 46f2afc0..22fec0a5 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SubEditActivity.kt
@@ -44,6 +44,7 @@ class SubEditActivity : BaseActivity() {
private fun bindingServer(subItem: SubscriptionItem): Boolean {
binding.etRemarks.text = Utils.getEditable(subItem.remarks)
binding.etUrl.text = Utils.getEditable(subItem.url)
+ binding.etUserAgent.text = Utils.getEditable(subItem.userAgent)
binding.etFilter.text = Utils.getEditable(subItem.filter)
binding.etIntelligentSelectionFilter.text = Utils.getEditable(subItem.intelligentSelectionFilter)
binding.chkEnable.isChecked = subItem.enabled
@@ -76,6 +77,7 @@ class SubEditActivity : BaseActivity() {
subItem.remarks = binding.etRemarks.text.toString()
subItem.url = binding.etUrl.text.toString()
+ subItem.userAgent = binding.etUserAgent.text.toString()
subItem.filter = binding.etFilter.text.toString()
subItem.intelligentSelectionFilter = binding.etIntelligentSelectionFilter.text.toString()
subItem.enabled = binding.chkEnable.isChecked
diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/util/HttpUtil.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/util/HttpUtil.kt
index f06c0426..6baf1d76 100644
--- a/V2rayNG/app/src/main/java/com/v2ray/ang/util/HttpUtil.kt
+++ b/V2rayNG/app/src/main/java/com/v2ray/ang/util/HttpUtil.kt
@@ -128,7 +128,7 @@ object HttpUtil {
* @throws IOException If an I/O error occurs.
*/
@Throws(IOException::class)
- fun getUrlContentWithUserAgent(url: String?, timeout: Int = 15000, httpPort: Int = 0): String {
+ fun getUrlContentWithUserAgent(url: String?, userAgent: String?, timeout: Int = 15000, httpPort: Int = 0): String {
var currentUrl = url
var redirects = 0
val maxRedirects = 3
@@ -136,7 +136,12 @@ object HttpUtil {
while (redirects++ < maxRedirects) {
if (currentUrl == null) continue
val conn = createProxyConnection(currentUrl, httpPort, timeout, timeout) ?: continue
- conn.setRequestProperty("User-agent", "v2rayNG/${BuildConfig.VERSION_NAME}")
+ val finalUserAgent = if (userAgent.isNullOrBlank()) {
+ "v2rayNG/${BuildConfig.VERSION_NAME}"
+ } else {
+ userAgent
+ }
+ conn.setRequestProperty("User-agent", finalUserAgent)
conn.connect()
val responseCode = conn.responseCode
diff --git a/V2rayNG/app/src/main/res/layout/activity_sub_edit.xml b/V2rayNG/app/src/main/res/layout/activity_sub_edit.xml
index baf3edb1..c3db6a96 100644
--- a/V2rayNG/app/src/main/res/layout/activity_sub_edit.xml
+++ b/V2rayNG/app/src/main/res/layout/activity_sub_edit.xml
@@ -74,6 +74,25 @@
+
+
+
+
+
+
+
+
إعداد مجموعة الاشتراك
ملاحظات
عنوان URL اختياري
+ User Agent
Remarks regular filter
تفعيل التحديث
تفعيل التحديث التلقائي
diff --git a/V2rayNG/app/src/main/res/values-bn/strings.xml b/V2rayNG/app/src/main/res/values-bn/strings.xml
index 43aea696..4361dda0 100644
--- a/V2rayNG/app/src/main/res/values-bn/strings.xml
+++ b/V2rayNG/app/src/main/res/values-bn/strings.xml
@@ -265,6 +265,7 @@
সাবস্ক্রিপশন গ্রুপ সেটিং
মন্তব্য
ঐচ্ছিক URL
+ User Agent
Remarks regular filter
আপডেট সক্রিয় করুন
স্বয়ংক্রিয় আপডেট সক্রিয় করুন
diff --git a/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml b/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml
index 0537ca66..3f8d1868 100644
--- a/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml
+++ b/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml
@@ -265,6 +265,7 @@
سامووا بونکۊ اشتراک
نیشتنا
نشۊوی اینترنتی اختیاری
+ User Agent
نوم موستعار فیلتر
فعال بیڌن ورۊ کردن
فعال بیڌن ورۊ کردن خوتکار
diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml
index 7d58e1ae..734784b6 100644
--- a/V2rayNG/app/src/main/res/values-fa/strings.xml
+++ b/V2rayNG/app/src/main/res/values-fa/strings.xml
@@ -262,6 +262,7 @@
تنظیمات گروه اشتراک
ملاحظات
نشانی اینترنتی اختیاری
+ User Agent
نام مستعار فیلتر
فعال کردن بهروزرسانی
فعال سازی بهروزرسانی خودکار
diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml
index 4022154c..befc2421 100644
--- a/V2rayNG/app/src/main/res/values-ru/strings.xml
+++ b/V2rayNG/app/src/main/res/values-ru/strings.xml
@@ -264,6 +264,7 @@
Группы
Название
URL (необязательно)
+ User Agent
Название фильтра
Использовать обновление
Использовать автообновление
diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml
index 117de036..161f078f 100644
--- a/V2rayNG/app/src/main/res/values-vi/strings.xml
+++ b/V2rayNG/app/src/main/res/values-vi/strings.xml
@@ -265,6 +265,7 @@
Các gói đăng ký
Tên gói đăng ký
URL gói đăng ký
+ User Agent
Remarks regular filter
Sử dụng gói đăng ký này
Bật tự động cập nhật
diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
index 7eabc42c..71609414 100644
--- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
+++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
@@ -262,6 +262,7 @@
订阅分组设置
备注
可选地址 (url)
+ User Agent
别名正则过滤
启用更新
启用自动更新
diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
index e85dd489..77b85d7c 100644
--- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
+++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
@@ -263,6 +263,7 @@
訂閱分組設定
備註
可選位址(url)
+ User Agent
別名正規過濾
啟用更新
啟用自動更新
diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml
index 90bbc067..39d00838 100644
--- a/V2rayNG/app/src/main/res/values/strings.xml
+++ b/V2rayNG/app/src/main/res/values/strings.xml
@@ -268,6 +268,7 @@
Subscription group setting
remarks
Optional URL
+ User Agent
Remarks regular filter
Enable update
Enable automatic update