[Feature] rule-providers 和 proxy-providers 能不能提供选择直连或代理选项
Edger opened this issue · 11 comments
感谢你向 Clash Core 提交 Feature Request!
在提交之前,请确认:
- 我已经在 Issue Tracker 中找过我要提出的请求
请注意,如果你并没有遵照这个 issue template 填写内容,我们将直接关闭这个 issue。
我都确认过了,我要继续提交。
请附上任何可以帮助我们解决这个问题的信息,如果我们收到的信息不足,我们将对这个 issue 加上 Needs more information 标记并在收到更多资讯之前关闭 issue。
Clash core config
……
Clash log
……
环境 Environment
- Clash Core 的操作系统 (the OS that the Clash core is running on)
…… - 使用者的操作系统 (the OS running on the client)
…… - 网路环境或拓扑 (network conditions/topology)
…… - iptables,如果适用 (if applicable)
…… - ISP 有没有进行 DNS 污染 (is your ISP performing DNS pollution?)
…… - 其他
……
说明 Description
RT,Clash 目前是强制 rule-providers 和 proxy-providers 走直连,能不能提供选择直连或代理选项。
那么多的规则都是托管在 GitHub 上,现在 GitHub 又彻底被墙了,现在 Clash 这种设置导致规则一直更新不了。
我看之前的 issue 说什么鸡生蛋的问题,在我看来,这个根本就不是问题。Clash 的使用本来就有一定门槛,会使用 Clash 的弄到一个可用的节点来更新 rule-providers 和 proxy-providers 不是什么难事,而且目前各机场基本都提供 Clash 远程配置,一键导入就有节点可以用了。
对比手机上的代理软件,我没看到一个是这样设计的,所有的连接都可以指定连接方式。
建议 Clash 加上 rule-providers 和 proxy-providers 指定连接方式的选项,最多默认直连就可以了。
可能的解决方案 Possible Solution
更多信息 More Information
不做是有理由的,建议用cdn比如jsdelivr获取git上的providers
不做是有理由的,建议用cdn比如jsdelivr获取git上的providers
那可否告知具體理由呢
不做是有理由的,建议用cdn比如jsdelivr获取git上的providers
这个理由除了鸡生蛋蛋生鸡的问题,还有什么?
如我描述所说,这个其实也根本不是问题,要不诸如手机上的那么一大票 app 也早就废了
没有必要,使用 angelknight007 兄弟说的 jsDelivr CDN 链接即可。
这就应该是属于UI的问题,UI控制provider的下载是否经代理
这就应该是属于UI的问题,UI控制provider的下载是否经代理
……你去看一下之前的 issue 再回吧
This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 5 days
我觉得可以参考的圈X的处理方式,允许开启全局代理来更新rule-providers,避免鸡生蛋蛋生鸡的问题。
现在jsdelivr也被墙了,proxy-provider-converter.vercel.app 也被墙了,可以重新抽空思考一下这个问题吗?
现在jsdelivr也被墙了,proxy-provider-converter.vercel.app 也被墙了,可以重新抽空思考一下这个问题吗?
我试了第三方的clash.meta, 下载rule-providers里面的数据时, 会根据rules里面设的proxy走.
提出一个个人的暂时解决办法,如果用的是cfw的话,可以利用parser预加载rule-providers到本地(而parser的加载过程是走代理的):
# 预加载rule-providers
- reg: ^.*$
code: |
module.exports.parse = async (raw, { axios, yaml, console, homeDir }) => {
const fs = require('fs');
const rawObj = yaml.parse(raw);
const providers = rawObj['rule-providers'];
for (let provider in providers) {
const obj = providers[provider];
if (obj.type === 'file') {
continue;
}
const ret = await axios({
method: 'get',
url: obj.url,
});
const fmt = obj.format === undefined || obj.format === 'yaml' ? 'yaml' : 'txt';
const filePath = homeDir + '\\ruleset\\' + provider + '.' + fmt;
fs.writeFileSync(filePath, ret.data);
obj.type = 'file';
obj.path = filePath;
delete obj.url;
}
return yaml.stringify(rawObj);
};
使用方法:将上述代码添加到parser末尾即可。代码可以自动预加载在其他parser设置的rule-provider,并将rule-provider指向预加载的本地文件。