Add 'ua' param for User-Agent in subscription fetching
Some checks failed
GitHub CI / Linux ${{ matrix.arch }} Build (aarch64, subconverter_aarch64, ubuntu-24.04-arm) (push) Has been cancelled
GitHub CI / Linux ${{ matrix.arch }} Build (amd64, subconverter_linux64, ubuntu-latest) (push) Has been cancelled
GitHub CI / Linux ${{ matrix.arch }} Build (armv7, subconverter_armv7, ubuntu-24.04-arm) (push) Has been cancelled
GitHub CI / Linux ${{ matrix.arch }} Build (x86, subconverter_linux32, ubuntu-latest) (push) Has been cancelled
GitHub CI / macOS ${{ matrix.arch }} Build (arm, subconverter_darwinarm, macos-14) (push) Has been cancelled
GitHub CI / macOS ${{ matrix.arch }} Build (x86, subconverter_darwin64, macos-13) (push) Has been cancelled
GitHub CI / Windows ${{ matrix.arch }} Build (amd64, subconverter_win64, x86_64, MINGW64) (push) Has been cancelled
GitHub CI / Windows ${{ matrix.arch }} Build (x86, subconverter_win32, i686, MINGW32) (push) Has been cancelled
Publish Docker Image / Build ${{ matrix.platform }} for Docker Hub (ubuntu-24.04-arm, linux/arm/v7) (push) Has been cancelled
Publish Docker Image / Build ${{ matrix.platform }} for Docker Hub (ubuntu-24.04-arm, linux/arm64) (push) Has been cancelled
Publish Docker Image / Build ${{ matrix.platform }} for Docker Hub (ubuntu-latest, linux/386) (push) Has been cancelled
Publish Docker Image / Build ${{ matrix.platform }} for Docker Hub (ubuntu-latest, linux/amd64) (push) Has been cancelled
Publish Docker Image / Build ${{ matrix.platform }} for GHCR (ubuntu-24.04-arm, linux/arm/v7) (push) Has been cancelled
Publish Docker Image / Build ${{ matrix.platform }} for GHCR (ubuntu-24.04-arm, linux/arm64) (push) Has been cancelled
Publish Docker Image / Build ${{ matrix.platform }} for GHCR (ubuntu-latest, linux/386) (push) Has been cancelled
Publish Docker Image / Build ${{ matrix.platform }} for GHCR (ubuntu-latest, linux/amd64) (push) Has been cancelled
Publish Docker Image / Merge Docker Hub (push) Has been cancelled
Publish Docker Image / Merge GHCR (push) Has been cancelled

This commit is contained in:
riolurs 2025-06-10 18:15:46 +08:00
parent 95f37065d9
commit 806ebe9b93
4 changed files with 36 additions and 2 deletions

View File

@ -306,7 +306,7 @@ http://127.0.0.1:25500/sub?target=%TARGET%&url=%URL%&emoji=%EMOJI%····
#### 调用说明 (进阶)
| 调用参数 | 必要性 | 示例 | 解释 |
| ------------- | :-: | :------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ------------- | :-: |:--------------------------| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| target | 必要 | surge&ver=4 | 指想要生成的配置类型,详见上方 [支持类型](#支持类型) 中的参数 |
| url | 可选 | https%3A%2F%2Fwww.xxx.com | 指机场所提供的订阅链接或代理节点的分享链接,需要经过 [URLEncode](https://www.urlencoder.org/) 处理,**可选的前提是在 `default_url` 中进行指定**。也可以使用 data URI。可使用 `tag:xxx,https%3A%2F%2Fwww.xxx.com` 指定该订阅的所有节点归属于`xxx`分组,用于配置文件中的`!!GROUP=XXX` 匹配 |
| group | 可选 | MySS | 用于设置该订阅的组名,多用于 SSD/SSR |
@ -340,6 +340,7 @@ http://127.0.0.1:25500/sub?target=%TARGET%&url=%URL%&emoji=%EMOJI%····
| classic | 可选 | true / false | 用于设置是否生成 Clash classical rule-provider |
| tls13 | 可选 | true / false | 用于设置是否为节点增加tls1.3开启参数 |
| new_name | 可选 | true / false | 如果设置为 true则将启用 Clash 的新组名称 (proxies, proxy-groups, rules) |
| ua | 可选 | shadowrocket%2F2.2.65 | 用于自定义User-Agent字符串需要经过 [URLEncode](https://www.urlencoder.org/) 处理。如果不指定将使用默认的User-Agent |
举个例子:
@ -361,6 +362,25 @@ http://127.0.0.1:25500/sub?target=surge&ver=4&tfo=true&udp=true&emoji=true&exclu
最后将该链接填写至 Surge 的订阅处就大功告成了。
```
**使用自定义User-Agent的例子**
```txt
有订阅 `https://example.com/subscribe`,想转换成 Clash 的订阅并指定User-Agent为 `shadowrocket/2.2.65`
首先确认需要用到的参数:
target=clash 、 ua=shadowrocket/2.2.65
url=https://example.com/subscribe
然后将需要 URLEncode 的部分进行处理:
ua=shadowrocket%2F2.2.65
url=https%3A%2F%2Fexample.com%2Fsubscribe
接着将所有元素进行拼接:
http://127.0.0.1:25500/sub?target=clash&ua=shadowrocket%2F2.2.65&url=https%3A%2F%2Fexample.com%2Fsubscribe
这样在获取订阅时就会使用指定的User-Agent字符串。
```
### 配置档案
> 当通过上述 [进阶链接](#进阶链接) 配置好订阅链接后,通常会使得链接十分冗长和难以记忆,此时可以考虑使用配置档案。

View File

@ -41,6 +41,7 @@ int addNodes(std::string link, std::vector<Proxy> &allNodes, int groupID, parse_
RegexMatchConfigs &time_rules = *parse_set.time_rules;
string_icase_map *request_headers = parse_set.request_header;
bool &authorized = parse_set.authorized;
string_icase_map custom_headers;
ConfType linkType = ConfType::Unknow;
std::vector<Proxy> nodes;
@ -142,7 +143,17 @@ int addNodes(std::string link, std::vector<Proxy> &allNodes, int groupID, parse_
writeLog(LOG_TYPE_INFO, "Downloading subscription data...");
if(startsWith(link, "surge:///install-config")) //surge config link
link = urlDecode(getUrlArg(link, "url"));
strSub = webGet(link, proxy, global.cacheSubscription, &extra_headers, request_headers);
// 处理自定义用户代理
if(request_headers)
custom_headers = *request_headers;
if(parse_set.custom_user_agent && !parse_set.custom_user_agent->empty())
{
custom_headers["User-Agent"] = *parse_set.custom_user_agent;
}
strSub = webGet(link, proxy, global.cacheSubscription, &extra_headers, &custom_headers);
/*
if(strSub.size() == 0)
{

View File

@ -24,6 +24,7 @@ struct parse_settings
std::string *sub_info = nullptr;
bool authorized = false;
string_icase_map *request_header = nullptr;
std::string *custom_user_agent = nullptr;
#ifndef NO_JS_RUNTIME
qjs::Runtime *js_runtime = nullptr;
qjs::Context *js_context = nullptr;

View File

@ -334,6 +334,7 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS)
std::string argCustomGroups = urlSafeBase64Decode(getUrlArg(argument, "groups")), argCustomRulesets = urlSafeBase64Decode(getUrlArg(argument, "ruleset")), argExternalConfig = getUrlArg(argument, "config");
std::string argDeviceID = getUrlArg(argument, "dev_id"), argFilename = getUrlArg(argument, "filename"), argUpdateInterval = getUrlArg(argument, "interval"), argUpdateStrict = getUrlArg(argument, "strict");
std::string argRenames = getUrlArg(argument, "rename"), argFilterScript = getUrlArg(argument, "filter_script");
std::string argUserAgent = getUrlArg(argument, "ua");
/// switches with default value
tribool argUpload = getUrlArg(argument, "upload"), argEmoji = getUrlArg(argument, "emoji"), argAddEmoji = getUrlArg(argument, "add_emoji"), argRemoveEmoji = getUrlArg(argument, "remove_emoji");
@ -610,6 +611,7 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS)
parse_set.sub_info = &subInfo;
parse_set.authorized = authorized;
parse_set.request_header = &request.headers;
parse_set.custom_user_agent = &argUserAgent;
parse_set.js_runtime = ext.js_runtime;
parse_set.js_context = ext.js_context;