chrome 如何匹配所有的下载链接?

2021-10-13 14:45:58 +08:00
 kgdb00

我有一个流量少延迟低的香港节点,和一个流量多延迟高的美国节点,平常使用香港节点来浏览网页,下载文件时就通过 SwitchyOmega 手动切换到美国节点节省流量,非常麻烦。

SwitchyOmega 支持根据规则切换代理,但我想不到怎样的规则适用于所有的下载链接。

我的需求是凡是会导致 chorme 有下载行为的链接,就自动使用美国节点下载。

比如 chrome 遇到没有后缀的 http 链接时,会判断如果是文本文件就直接在 chrome 中显示文本的内容,如果是二进制文件就直接下载,所以不能简单的通过有无后缀来判断是否要切换代理。

再比如遇到一些特定后缀的文件就直接下载,例如 .zip .iso .tar.gz ,但我不知道具体有多少种

还有 github 的下载链接是通过添加 response-content-type=application%2Foctet-stream 参数告知 chrome 这是一个下载请求

etc...

我感觉这可能需要自己写一个插件来实现,请教大佬这要怎么实现?

841 次点击
所在节点    前端开发
11 条回复
AoEiuV020
2021-10-13 15:40:24 +08:00
怎么看都只能写个下载管理器的插件才能实现的,
Xushet
2021-10-13 17:07:37 +08:00
根据文件类型后缀检测?
0TSH60F7J2rVkg8t
2021-10-13 17:10:10 +08:00
有些下载地址是先情求得到 cdn 的 key,然后才 302 条转到目标地址下载,而这个 key 会检测 IP 的,如果 IP 不一样下载会失败。
hsfzxjy
2021-10-13 17:12:08 +08:00
应该是是 response 的 content type 在影响,感觉没有比尝试发一个请求更靠谱的办法
InDom
2021-10-13 17:13:02 +08:00
自己写规则来实现,因为你需要的响应头是已经请求回来的数据了。

比如 github 的下载 直接把 https://github-releases.githubusercontent.com/ 加入规则即可 其他的也同理

至于你想的那种需求,只能是下载管理器的实现,或者拦截响应头,如果是特定名单,就断开链接,重新走到其他方式下载,自己内建代理下载,

但是 考虑到某些下载链接有防盗链,一次性有效等问题,也不合适,比如某些论坛收费附件可能导致二次收费。
ch2
2021-10-13 17:24:19 +08:00
1. 监听下载事件 chrome.downloads.onCreated,获取 finalUrl
2. 把 finalUrl 添加到 pac 脚本里
3. chrome.proxy.settings.set ,把刚刚修改的 pac 脚本设置生效
ch2
2021-10-13 17:27:55 +08:00
kgdb00
2021-10-13 17:28:47 +08:00
感谢各位回复,我研究了一下插件编写觉得太麻烦就放弃了,我现在 SwitchyOmega 中建立 2 个自动切换的代理,一个默认使用香港节点,一个默认使用美国节点。

默认使用香港节点的把一些耗流量的 url 配置成使用美国节点
默认使用美国节点的把一些需要低延迟的 url 配置成使用香港节点

能凑合用
kgdb00
2021-10-13 17:36:12 +08:00
担心流量被过度消耗的时候就切换到默认为美国节点的自动切换配置,觉得打开网页慢的时候就切换成默认使用香港节点的自动切换配置。

我的美国节点只是延迟低一些,打开网页也没有特别慢
kgdb00
2021-10-13 17:37:10 +08:00
@kgdb00 我的美国节点只是延迟高一些
VZEXEZVzzz
2021-10-13 17:38:15 +08:00
可以考虑用轻量下载器接管 chrome 下载比较省心 比如 ndm,或者老牌 idm

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/807553

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX