mirror of
https://github.com/MetaCubeX/subconverter.git
synced 2025-11-04 18:19:42 +08:00
Add 'ua' param for User-Agent in subscription fetching
Some checks are pending
GitHub CI / Linux ${{ matrix.arch }} Build (aarch64, subconverter_aarch64, ubuntu-24.04-arm) (push) Waiting to run
GitHub CI / Linux ${{ matrix.arch }} Build (amd64, subconverter_linux64, ubuntu-latest) (push) Waiting to run
GitHub CI / Linux ${{ matrix.arch }} Build (armv7, subconverter_armv7, ubuntu-24.04-arm) (push) Waiting to run
GitHub CI / Linux ${{ matrix.arch }} Build (x86, subconverter_linux32, ubuntu-latest) (push) Waiting to run
GitHub CI / macOS ${{ matrix.arch }} Build (arm, subconverter_darwinarm, macos-14) (push) Waiting to run
GitHub CI / macOS ${{ matrix.arch }} Build (x86, subconverter_darwin64, macos-13) (push) Waiting to run
GitHub CI / Windows ${{ matrix.arch }} Build (amd64, subconverter_win64, x86_64, MINGW64) (push) Waiting to run
GitHub CI / Windows ${{ matrix.arch }} Build (x86, subconverter_win32, i686, MINGW32) (push) Waiting to run
Publish Docker Image / Build ${{ matrix.platform }} Image (ubuntu-24.04-arm, linux/arm/v7) (push) Waiting to run
Publish Docker Image / Build ${{ matrix.platform }} Image (ubuntu-24.04-arm, linux/arm64) (push) Waiting to run
Publish Docker Image / Build ${{ matrix.platform }} Image (ubuntu-latest, linux/386) (push) Waiting to run
Publish Docker Image / Build ${{ matrix.platform }} Image (ubuntu-latest, linux/amd64) (push) Waiting to run
Publish Docker Image / Merge (push) Blocked by required conditions
Some checks are pending
GitHub CI / Linux ${{ matrix.arch }} Build (aarch64, subconverter_aarch64, ubuntu-24.04-arm) (push) Waiting to run
GitHub CI / Linux ${{ matrix.arch }} Build (amd64, subconverter_linux64, ubuntu-latest) (push) Waiting to run
GitHub CI / Linux ${{ matrix.arch }} Build (armv7, subconverter_armv7, ubuntu-24.04-arm) (push) Waiting to run
GitHub CI / Linux ${{ matrix.arch }} Build (x86, subconverter_linux32, ubuntu-latest) (push) Waiting to run
GitHub CI / macOS ${{ matrix.arch }} Build (arm, subconverter_darwinarm, macos-14) (push) Waiting to run
GitHub CI / macOS ${{ matrix.arch }} Build (x86, subconverter_darwin64, macos-13) (push) Waiting to run
GitHub CI / Windows ${{ matrix.arch }} Build (amd64, subconverter_win64, x86_64, MINGW64) (push) Waiting to run
GitHub CI / Windows ${{ matrix.arch }} Build (x86, subconverter_win32, i686, MINGW32) (push) Waiting to run
Publish Docker Image / Build ${{ matrix.platform }} Image (ubuntu-24.04-arm, linux/arm/v7) (push) Waiting to run
Publish Docker Image / Build ${{ matrix.platform }} Image (ubuntu-24.04-arm, linux/arm64) (push) Waiting to run
Publish Docker Image / Build ${{ matrix.platform }} Image (ubuntu-latest, linux/386) (push) Waiting to run
Publish Docker Image / Build ${{ matrix.platform }} Image (ubuntu-latest, linux/amd64) (push) Waiting to run
Publish Docker Image / Merge (push) Blocked by required conditions
This commit is contained in:
parent
a810601250
commit
a6eee00a32
22
README-cn.md
22
README-cn.md
@ -306,7 +306,7 @@ http://127.0.0.1:25500/sub?target=%TARGET%&url=%URL%&emoji=%EMOJI%····
|
|||||||
#### 调用说明 (进阶)
|
#### 调用说明 (进阶)
|
||||||
|
|
||||||
| 调用参数 | 必要性 | 示例 | 解释 |
|
| 调用参数 | 必要性 | 示例 | 解释 |
|
||||||
| ------------- | :-: | :------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ------------- | :-: |:--------------------------| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| target | 必要 | surge&ver=4 | 指想要生成的配置类型,详见上方 [支持类型](#支持类型) 中的参数 |
|
| 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` 匹配 |
|
| 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 |
|
| 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 |
|
| classic | 可选 | true / false | 用于设置是否生成 Clash classical rule-provider |
|
||||||
| tls13 | 可选 | true / false | 用于设置是否为节点增加tls1.3开启参数 |
|
| tls13 | 可选 | true / false | 用于设置是否为节点增加tls1.3开启参数 |
|
||||||
| new_name | 可选 | true / false | 如果设置为 true,则将启用 Clash 的新组名称 (proxies, proxy-groups, rules) |
|
| 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 的订阅处就大功告成了。
|
最后将该链接填写至 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字符串。
|
||||||
|
```
|
||||||
|
|
||||||
### 配置档案
|
### 配置档案
|
||||||
|
|
||||||
> 当通过上述 [进阶链接](#进阶链接) 配置好订阅链接后,通常会使得链接十分冗长和难以记忆,此时可以考虑使用配置档案。
|
> 当通过上述 [进阶链接](#进阶链接) 配置好订阅链接后,通常会使得链接十分冗长和难以记忆,此时可以考虑使用配置档案。
|
||||||
|
|||||||
@ -41,6 +41,7 @@ int addNodes(std::string link, std::vector<Proxy> &allNodes, int groupID, parse_
|
|||||||
RegexMatchConfigs &time_rules = *parse_set.time_rules;
|
RegexMatchConfigs &time_rules = *parse_set.time_rules;
|
||||||
string_icase_map *request_headers = parse_set.request_header;
|
string_icase_map *request_headers = parse_set.request_header;
|
||||||
bool &authorized = parse_set.authorized;
|
bool &authorized = parse_set.authorized;
|
||||||
|
string_icase_map custom_headers;
|
||||||
|
|
||||||
ConfType linkType = ConfType::Unknow;
|
ConfType linkType = ConfType::Unknow;
|
||||||
std::vector<Proxy> nodes;
|
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...");
|
writeLog(LOG_TYPE_INFO, "Downloading subscription data...");
|
||||||
if(startsWith(link, "surge:///install-config")) //surge config link
|
if(startsWith(link, "surge:///install-config")) //surge config link
|
||||||
link = urlDecode(getUrlArg(link, "url"));
|
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)
|
if(strSub.size() == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -24,6 +24,7 @@ struct parse_settings
|
|||||||
std::string *sub_info = nullptr;
|
std::string *sub_info = nullptr;
|
||||||
bool authorized = false;
|
bool authorized = false;
|
||||||
string_icase_map *request_header = nullptr;
|
string_icase_map *request_header = nullptr;
|
||||||
|
std::string *custom_user_agent = nullptr;
|
||||||
#ifndef NO_JS_RUNTIME
|
#ifndef NO_JS_RUNTIME
|
||||||
qjs::Runtime *js_runtime = nullptr;
|
qjs::Runtime *js_runtime = nullptr;
|
||||||
qjs::Context *js_context = nullptr;
|
qjs::Context *js_context = nullptr;
|
||||||
|
|||||||
@ -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 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 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 argRenames = getUrlArg(argument, "rename"), argFilterScript = getUrlArg(argument, "filter_script");
|
||||||
|
std::string argUserAgent = getUrlArg(argument, "ua");
|
||||||
|
|
||||||
/// switches with default value
|
/// switches with default value
|
||||||
tribool argUpload = getUrlArg(argument, "upload"), argEmoji = getUrlArg(argument, "emoji"), argAddEmoji = getUrlArg(argument, "add_emoji"), argRemoveEmoji = getUrlArg(argument, "remove_emoji");
|
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.sub_info = &subInfo;
|
||||||
parse_set.authorized = authorized;
|
parse_set.authorized = authorized;
|
||||||
parse_set.request_header = &request.headers;
|
parse_set.request_header = &request.headers;
|
||||||
|
parse_set.custom_user_agent = &argUserAgent;
|
||||||
parse_set.js_runtime = ext.js_runtime;
|
parse_set.js_runtime = ext.js_runtime;
|
||||||
parse_set.js_context = ext.js_context;
|
parse_set.js_context = ext.js_context;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user