jc3213 / download_with_aria2

The browser extenson for aria2 download utility via JSON-RPC
GNU Lesser General Public License v2.1
66 stars 9 forks source link

Firefox 使用 webRequest API 抓取下载时,文件名出错 #12

Closed ivysrono closed 2 years ago

ivysrono commented 2 years ago

amo上已经退回3.7.7 比方说release里: 3.7.7下载:download_with_aria2-3.8.1 3.8.x和3.9.x下载结果:attachment; filename=download_with_aria2-3.8.1 当然还有些需要登录的网站直接就变成不能下载了。 还有才发现3.9.2会把amo的安装劫持成下载: https://addons.mozilla.org/firefox/addon/download-with-aria2/ 点击添加到firefox,不是安装,直接Aria2开始下载了。

jc3213 commented 2 years ago

劫持AMO这个是新API的问题……准确的说是我参考了 Aria2-Integration 。源码就是请求头content-type="application/xxxx"或者存在content-disposition就会抓取,只不过这个是取消Web请求,然后弹出窗口让你选择下载(aria2),保存,另存为,取消。而我是直接走后台的Capture Code进行抓取了。

可以把mozilla.org添加到Ignore名单里面作为临时方案,如果是从判断代码里添加application/xpinstall类型的例外的话,以后用户将永远无法抓取XPI相关的下载。在现在至少还有选择的机会……3.9.5版本已经添加了基于文件扩展名的例外判断。到这里本问题修复。

文件名问题,也是源自webRequest,只不过我觉得原本的获取文件名的代码我觉得不太合理。 我通过https://github.com/jc3213/download_with_aria2-archived/issues/29 里的连接提取到了content-disposition这个属性。

content-disposition=attachment;filename="HiSuite_11.0.0.510_OVE.rar";filename*=UTF-8''HiSuite_11.0.0.510_OVE.rar

当时我做了一定的适配。并且测试有效。 测试结果

而且在 Issue #7 我给了返回旧版功能的方案,毕竟两个方案各有利弊,但是目前看来webRequest的负面影响最小,因此成为了默认方案,仅此而已。

只不过作为新的方案,我只是单纯抄了思路,下面的实现都是基于我自己的代码,并没有旧方案成熟,我一个以Chrome为主浏览器的人测试得到的范围是很有限的。

jc3213 commented 2 years ago

仔细看了下说到github下载出错,我去看了下,发现问题所在。看来这个attachment部分没有一个特别普适的格式,如果可以的话希望提供大量样本让我看看怎么弄。感觉只是修复github还会出问题。要么就是抄源代码关于获取文件名的部分…… 原来如此

jc3213 commented 2 years ago

@ivysrono 帮忙测试一下最新代码吧,我还留下了debug用的代码。可以的话提供一下之后反馈文件名错误的时候提供一下console的记录 修复+Debug

jc3213 commented 2 years ago

现在已经发布3.9.4,增加了忽略文件后缀选项,并添加了默认规则xpi,在AMO测试成功,可以正常安装扩展。目前判定优先级为 忽略域名 > 忽略文件后缀 > 总是抓取 > 监视域名 > 监视文件后缀 > 文件大小

关于webRequestAPI抓取文件名错误,也进行了修复,参考上面的 https://github.com/jc3213/download_with_aria2/issues/12#issuecomment-1023128927 ,但是我也只是根据你提供了的线索制作了规则,这个规则可能并不完善。如果遇到问题请反馈错误。

反馈错误时希望能提供,当前网页的URL,以及 下载链接。 可以的话提供精确的按钮以便测试。新功能有各种各样的错误在所难免,希望能理解理解。

@ivysrono

ivysrono commented 2 years ago

我原来也用的Aria2-Integration,就是因为他们一直不解决一些文件名的问题,找了很久迁移过来的。 刚测试了下,相比3.7.7,3.9.4在以下网站存在问题:

jc3213 commented 2 years ago

内部的东西我无能为力,你可以试试下载Firefox开发者版本,然后对扩展进行Debug,然后控制台你可以看到下载前输入的content-disposition的值,第一次提取filename="xxxxxxxxx" yyyyy; 然后删除所有"的结果。当然因为我没有更多的测试条件,需要他人帮忙完善这些条目。

然后我也在做方便正式版用户的功能。一个前置的manager界面(打开扩展options)时显示。可以修改抓取API跟恢复之前的一些功能(界面没i18n,不想做了)。

我会尝试通过iframe打开options,然后对iframe进行操作,添加界面来这种手段实现更高级的额外UI插入(即使拖后性能,你也不会在options页面不停刷新,是吧?) pre-manager safe mode

jc3213 commented 2 years ago

新的iframe + 注入法,iframe让火狐的Options页面变正常了…… legacy mode warning legacy options switch api

jc3213 commented 2 years ago

@ivysrono 麻烦测试下3.9.6 是否修复了 北大法宝下载文件名中文乱码(大概需要帐号);我测试QQ邮箱的时候发现日文文件的disposition为

attachment; filename="���-�信��.rar"; filename*=utf-8''%E5%8D%83%E6%9C%AC%E6%A1%9C-%E7%9D%80%E4%BF%A1%E3%83%A1%E3%83%AD.rar

我根据之前的代码稍微改了下,至少能解决一部分乱码问题了。如果可以提供更多的实例更好。这里还是推荐看下控制台

about:devtools-toolbox?id=firefox%40downloadWithAria2&type=extension

的各种log,把这些log,跟正常的文件名提供给我,方便我进行适配。

jc3213 commented 2 years ago

推送了3.9.7

修复了默认options,从3.9.4到3.9.6的新用户这里会因为损坏导致功能异常。 同时为新UI增加了依赖性跟i18n。

再就是真心希望能帮忙完善webRequestAPI的文件名。可以的话帮忙打开Debug控制台测试几个网址吧。

另,部分满足则但是也无法抓取的会也会单独记录

jc3213 commented 2 years ago

@ivysrono 最新的main已经能处理大部分文件名了,希望能帮忙测试更多的结果。 FF下载 Github下载 QQ邮箱 百度网盘 3DM下载 3DM广告

jc3213 commented 2 years ago

新测试了下Google Drive,Source Forge还有其他的一些下载,包括一个冷门网盘 foobar2000 sourceforge WinRAR wupfiles 谷歌Drive

jc3213 commented 2 years ago

发现有错误,可能是影响 网易邮箱附件无法下载; 抓取的原因之一。希望能配合测试 错误

ivysrono commented 2 years ago

master 626: 北大法宝:

--------------------------
https://www.pkulaw.com/chl/039ccfd9a6eb5dc4bdfb.html background.js:56:9
attachment; filename="中å�±ä¸­å¤®å��å�¬å��å�°å��ã��å�³äº�建ç«�中å°�å­¦æ ¡å��ç»�ç»�é¢�导ç��æ ¡é�¿è´�è´£å�¶ç��æ��è§�(è¯�è¡�)ã��(FBM-CLI-16-5113888).txt" background.js:123:9
[
  "attachment; filename=\"中共中央办公厅印发《关于建立中小学校党组织领导的校长负责制的意见(试行)》(FBM-CLI-16-5113888).txt\""
]
中�中央��������建�中�学校����导�校��责����(��)�(FBM-CLI-16-5113888).txt
downloadfile
20
firefox-default
jc3213 commented 2 years ago

3.9.8: 北大法宝:

--------------------------
https://www.pkulaw.com/chl/039ccfd9a6eb5dc4bdfb.html background.js:56:9
attachment; filename="中å�±ä¸­å¤®å��å�¬å��å�°å��ã��å�³äº�建ç«�中å°�å­¦æ ¡å��ç»�ç»�é¢�导ç��æ ¡é�¿è´�è´£å�¶ç��æ��è§�(è¯�è¡�)ã��(FBM-CLI-16-5113888).txt" background.js:123:9
[
  "attachment; filename=\"中�中央��������建�中�学校����导�校��责����(��)�(FBM-CLI-16-5113888).txt\""
]
中�中央��������建�中�学校����导�校��责����(��)�(FBM-CLI-16-5113888).txt
downloadfile

最终下载的文件名是downloadfile吗?这个东西主要是因为responseHeaders的content-disposition只接受ASCII字符,非ASCII都会乱码,一般推荐用先转换成utf-8,然后用filename*=utf-8''转换后的文件名去显示,所以你看到QQ就正常。这个,包括3DM广告就提取错误。

我在提取错误时的操作是从url提取。现在看来干脆直接移除所有非ASCII字符更合适?但是如果完全不包含正常字符串的话直接空文件名了……感觉我该顺便记录一下downloadfile的URL看看是否URL那边能提取出来。

ivysrono commented 2 years ago

最终下载的文件名是downloadfile吗

jc3213 commented 2 years ago

上面我编辑了一下。你再试试最新的main 627,我想看看下载url那边是否有可解决的方案……

另外网易邮箱正常了吗?其他内网啥的?

jc3213 commented 2 years ago

另外 3.9.6 以后,用户已经可以直接选择使用 webRequest APIdownloads API了,正式推到AMO上也没有任何问题了吧?

PS:我发现我被 Aria2-Integration 源码给误导了,根本没必要从URL提取文件名啊,直接把URL丢给Aria2让它自动生成不好吗?

最新628应该北大法宝没问题了。

ivysrono commented 2 years ago

main628 法宝和126邮箱都无法下载了。 都报错:

Uncaught (in promise) TypeError: store.proxy_include is undefined
    startDownload moz-extension://04b0e5b8-cd65-451b-9ab3-dc4ea8d37563/background.js:94
    async* moz-extension://04b0e5b8-cd65-451b-9ab3-dc4ea8d37563/background.js:63
background.js:94:5

另外我没找到在哪选择API啊

ivysrono commented 2 years ago

main629 法宝直接用浏览器自带下载了。 网易邮箱还是和628一样报错。

jc3213 commented 2 years ago

main628 法宝和126邮箱都无法下载了。 都报错:

Uncaught (in promise) TypeError: store.proxy_include is undefined
    startDownload moz-extension://04b0e5b8-cd65-451b-9ab3-dc4ea8d37563/background.js:94
    async* moz-extension://04b0e5b8-cd65-451b-9ab3-dc4ea8d37563/background.js:63
background.js:94:5

另外我没找到在哪选择API啊

这个错误是因为我为了添加文件扩展名例外规则,然后修改了储存里的键值。但是我做了个补丁(参考老版本)的,并且我自己测试3.9.3到3.9.4是正常切换过去了的。实在不行麻烦删除重装应该就好了,主要是之前的设置备份不能用了,直接导入老的就会报错。

然后关于切换API 选择 确定 切换 文件夹 输入文件夹

jc3213 commented 2 years ago

话说你有试试看632么?之前你说的网易邮箱无法下载跟内网那边正常了么?

ivysrono commented 2 years ago

原来切换API是放在这里的没有放在图表弹出里。 632还没来得及试,晚上我开个新配置来测试。

jc3213 commented 2 years ago

原来切换API是放在这里的没有放在图表弹出里。 632还没来得及试,晚上我开个新配置来测试。

主要为了那个弹出通知,免得有些人乱改导致出问题,毕竟现在新手比较多……比如会触发抓取的两个选项时才会显示等等,所以就放到相关设置里了

ivysrono commented 2 years ago

634 webRequest API

北大法宝:

--------------------------
https://www.pkulaw.com/chl/039ccfd9a6eb5dc4bdfb.html background.js:56:9
attachment; filename="中å�±ä¸­å¤®å��å�¬å��å�°å��ã��å�³äº�建ç«�中å°�å­¦æ ¡å��ç»�ç»�é¢�导ç��æ ¡é�¿è´�è´£å�¶ç��æ��è§�(è¯�è¡�)ã��(FBM-CLI-16-5113888).txt" background.js:124:9

Array [ "attachment; filename=\"中å\u0085±ä¸­å¤®å\u008a\u009eå\u0085¬å\u008e\u0085å\u008d°å\u008f\u0091ã\u0080\u008aå\u0085³äº\u008e建ç«\u008b中å°\u008få­¦æ ¡å\u0085\u009aç»\u0084ç»\u0087é¢\u0086导ç\u009a\u0084æ ¡é\u0095¿è´\u009fè´£å\u0088¶ç\u009a\u0084æ\u0084\u008fè§\u0081(è¯\u0095è¡\u008c)ã\u0080\u008b(FBM-CLI-16-5113888).txt\"", "\"中å\u0085±ä¸­å¤®å\u008a\u009eå\u0085¬å\u008e\u0085å\u008d°å\u008f\u0091ã\u0080\u008aå\u0085³äº\u008e建ç«\u008b中å°\u008få­¦æ ¡å\u0085\u009aç»\u0084ç»\u0087é¢\u0086导ç\u009a\u0084æ ¡é\u0095¿è´\u009fè´£å\u0088¶ç\u009a\u0084æ\u0084\u008fè§\u0081(è¯\u0095è¡\u008c)ã\u0080\u008b(FBM-CLI-16-5113888).txt\"" ]
​
0: "attachment; filename=\"中å\u0085±ä¸­å¤®å\u008a\u009eå\u0085¬å\u008e\u0085å\u008d°å\u008f\u0091ã\u0080\u008aå\u0085³äº\u008e建ç«\u008b中å°\u008få­¦æ ¡å\u0085\u009aç»\u0084ç»\u0087é¢\u0086导ç\u009a\u0084æ ¡é\u0095¿è´\u009fè´£å\u0088¶ç\u009a\u0084æ\u0084\u008fè§\u0081(è¯\u0095è¡\u008c)ã\u0080\u008b(FBM-CLI-16-5113888).txt\""
​
groups: undefined
​
index: 0
​
input: "attachment; filename=\"中å\u0085±ä¸­å¤®å\u008a\u009eå\u0085¬å\u008e\u0085å\u008d°å\u008f\u0091ã\u0080\u008aå\u0085³äº\u008e建ç«\u008b中å°\u008få­¦æ ¡å\u0085\u009aç»\u0084ç»\u0087é¢\u0086导ç\u009a\u0084æ ¡é\u0095¿è´\u009fè´£å\u0088¶ç\u009a\u0084æ\u0084\u008fè§\u0081(è¯\u0095è¡\u008c)ã\u0080\u008b(FBM-CLI-16-5113888).txt\""
​
length: 1
​
<prototype>: Array []
background.js:127:9

Non-Standard Filename 中å�±ä¸­å¤®å��å�¬å��å�°å��ã��å�³äº�建ç«�中å°�å­¦æ ¡å��ç»�ç»�é¢�导ç��æ ¡é�¿è´�è´£å�¶ç��æ��è§�(è¯�è¡�)ã��(FBM-CLI-16-5113888).txt background.js:134:20

18 background.js:60:9

firefox-default background.js:62:9

Uncaught (in promise) TypeError: store.proxy_include is undefined
    startDownload moz-extension://1081e367-94d5-405a-9154-39319be80d56/background.js:95
    async* moz-extension://1081e367-94d5-405a-9154-39319be80d56/background.js:63
background.js:95:5

网易邮箱:

--------------------------
https://mail.126.com/js6/main.jsp?sid=NBkPbuENNMKkVtPFfeNNyZyJJoUnbeZT&df=mail163_letter background.js:56:9

attachment; filename="=?UTF8?B?6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v?= =?UTF8?B?4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==?=" background.js:124:9

Array [ "attachment; filename=\"=?UTF8?B?6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v?= =?UTF8?B?4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==?=\"", "\"=?UTF8?B?6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v?= =?UTF8?B?4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==?=\"" ]
background.js:127:9

=?UTF8?B?6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v?= =?UTF8?B?4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==?= background.js:130:9

19 background.js:60:9

firefox-default background.js:62:9

Uncaught (in promise) TypeError: store.proxy_include is undefined
    startDownload moz-extension://1081e367-94d5-405a-9154-39319be80d56/background.js:95
    async* moz-extension://1081e367-94d5-405a-9154-39319be80d56/background.js:63
background.js:95:5
ivysrono commented 2 years ago

634 downloads API 北大法宝和网易邮箱:

Uncaught (in promise) TypeError: store.proxy_include is undefined
    startDownload moz-extension://1081e367-94d5-405a-9154-39319be80d56/background.js:95
    async* moz-extension://1081e367-94d5-405a-9154-39319be80d56/background.js:44
    async* moz-extension://1081e367-94d5-405a-9154-39319be80d56/background.js:43
background.js:95:5
jc3213 commented 2 years ago
Uncaught (in promise) TypeError: store.proxy_include is undefined

这个问题很奇怪,哪怕你新开一个档案,这个值一定是undefined,但是我在chrome测试完全正常。火狐只要清空所有记录,然后让扩展自行读取默认,就会立刻出这个问题。原因未知。另外 https://github.com/jc3213/download_with_aria2/commit/59074cb84c0bad07a56587089d8edda431bb97d3 这次修改以后,根本没改与store['proxy_include']相关的东西,但是莫名其妙就正常了。我反正就迷惑。

然后关于文件名,我实在没办法了。如果attach;本身是乱码无法修正,那么就丢给aria2下载,虽然aria2很可能下载成UTF-8编码的文件名。然后考虑这里我做了个类似修复文件名的小功能,放到了设置的初级设置下面(还是要走设置页因为要打开文件)

修复

jc3213 commented 2 years ago

你也可以手动把设置里的Proxy Include Domains下面的undefined删除掉。只不过保存的值就会变成string。理论上最新的main就没问题了。我也不知道为什么就好了,挺迷惑的

ivysrono commented 2 years ago

Proxy Include Domains 在哪里 图片

jc3213 commented 2 years ago

啊……就是代理域名规则,你现在看起来是正常的啊?还是会提示store.proxy_include错误么?

ivysrono commented 2 years ago

好像用 downloads API 就还好,WebRequest API 就各种错误。 明天再仔细测试

jc3213 commented 2 years ago

好像用 downloads API 就还好,WebRequest API 就各种错误。 明天再仔细测试

webRequest那边我测试还好。就是你遇到那个store.proxy_include很迷惑,没修改相关内容,但是莫名其妙好了(我测试了两次)。然后文件名我也不知道怎么办了,直接下下来utf-8代码也比完全乱码好……

然后我看了下网易的attachment,文件名是base64编码……这……

jc3213 commented 2 years ago

store.proxy_include跟store.capture_reject我测试也会莫名其妙读出来是undefined。fetch出来的结果也没问题,不管是走res.json,或者JSON.parse,都会出这个诡异的bug

jc3213 commented 2 years ago

main629 法宝直接用浏览器自带下载了。 网易邮箱还是和628一样报错。

我发现之前那个store.proxy_include未定义跟那个修复补丁有关,不知道为什么高版本还在执行导致的。有毒……去掉后正常了

ivysrono commented 2 years ago

3.10.2 downloads API 终于好了 webRequest API 依然错误: 北大法宝文件名 downloadfile。 网易邮箱附件下载错误。

--------------------------
https://www.pkulaw.com/chl/039ccfd9a6eb5dc4bdfb.html background.js:46:9
attachment; filename="中å�±ä¸­å¤®å��å�¬å��å�°å��ã��å�³äº�建ç«�中å°�å­¦æ ¡å��ç»�ç»�é¢�导ç��æ ¡é�¿è´�è´£å�¶ç��æ��è§�(è¯�è¡�)ã��(FBM-CLI-16-5113888).txt" 
Array [ "attachment; filename=\"中å\u0085±ä¸­å¤®å\u008a\u009eå\u0085¬å\u008e\u0085å\u008d°å\u008f\u0091ã\u0080\u008aå\u0085³äº\u008e建ç«\u008b中å°\u008få­¦æ ¡å\u0085\u009aç»\u0084ç»\u0087é¢\u0086导ç\u009a\u0084æ ¡é\u0095¿è´\u009fè´£å\u0088¶ç\u009a\u0084æ\u0084\u008fè§\u0081(è¯\u0095è¡\u008c)ã\u0080\u008b(FBM-CLI-16-5113888).txt\"" ]
background.js:107:9
Non-Standard Filename 中å�±ä¸­å¤®å��å�¬å��å�°å��ã��å�³äº�建ç«�中å°�å­¦æ ¡å��ç»�ç»�é¢�导ç��æ ¡é�¿è´�è´£å�¶ç��æ��è§�(è¯�è¡�)ã��(FBM-CLI-16-5113888).txt background.js:113:9
64 background.js:50:9
firefox-default background.js:52:9
Download started! c0d49f92058c8789 background.js:65:17
Download finished! c0d49f92058c8789 background.js:67:17
--------------------------
https://mail.126.com/js6/main.jsp?sid=NBsGRdENQJaZVtXSVeNNOVzLQqURQsde&df=mail163_letter background.js:46:9
attachment; filename="=?UTF8?B?6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v?= =?UTF8?B?4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==?=" 
Array [ "attachment; filename=\"=?UTF8?B?6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v?= =?UTF8?B?4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==?=\"", "\"=?UTF8?B?6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v?= =?UTF8?B?4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==?=\"" ]
background.js:107:9
=?UTF8?B?6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v?= =?UTF8?B?4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==?= background.js:110:9
66 background.js:50:9
firefox-default background.js:52:9
Download started! 693620965ff7a1d4 background.js:65:17
Download finished! 693620965ff7a1d4 background.js:67:17
jc3213 commented 2 years ago

网易那个,应该是文件名问题导致下载错误,因为里面有问号……然后这个文件名看着像base64但是,感觉很怪?不知道什么规则。或许需要做专门的适配,还是直接丢连接给aria2让aria2自己生成呢?

北大法宝因为提示不符合规则的文件名,所以返回直接丢给aria2处理了。然后默认下了个downloadfile文件,能否把这个下载地址发我看看有没什么规则?

打开aria2任务管理器(点任务旁边的放大镜),下面就有。

jc3213 commented 2 years ago

输入atob('6L+O55yB6L+Q5bi45bee5biC56ys5LiA5bGK4oCc6Iux6I6x5YWL5p2v')得到结果'è¿\x8Eç\x9C\x81è¿\x90常å·\x9Eå¸\x82第ä¸\x80å±\x8Aâ\x80\x9Cè\x8B±è\x8E±å\x85\x8Bæ\x9D¯'

输入atob('4oCd5bCR5YS/5Zu05qOL5ZCN5Lq66YKA6K+36LWbLnJhcg==')得到结果'â\x80\x9Då°\x91å\x84¿å\x9B´æ£\x8Bå\x90\x8D人é\x82\x80请èµ\x9B.rar'

感觉即使给了特例处理,结果还是乱码……还是只有丢给aria2。

687没动这里,只是单纯的做调整了一些事件,为将来添加任务提醒(任务开始时,任务完成时),当然这里思路还没做。

再就是不知道能否通过任务开始后根据推送的gid,然后获取任务文件名,然后通过发送{out}属性给aria2实现修正名字。但是小文件瞬间下好好像又没什么卵用?而且如果已经识别好非%24%76这种UTF-8代码的名字也修不了……

ivysrono commented 2 years ago

图片

ivysrono commented 2 years ago

图片

ivysrono commented 2 years ago

687好是错觉,因为之前的配置导致使用的 downloads API

jc3213 commented 2 years ago

网易的这个是因为通过attachment判断文件名是,生成的文件名包含违法字符?导致的无法下载,这个要单独做适配……

百大法宝好像也没在链接里提供啥可供判断的东西……感觉只能切换API?

ivysrono commented 2 years ago

网易的这个是因为通过attachment判断文件名是,生成的文件名包含违法字符?导致的无法下载,这个要单独做适配……

百大法宝好像也没在链接里提供啥可供判断的东西……感觉只能切换API?

687切换API都好。

网易你再努力下,差不多了我再推送。

jc3213 commented 2 years ago

其实我想着把抓取做成Mixed Mode,但是害怕做不好……而且downloads API确实不靠谱。

回头再看看怎么处理这里吧

ivysrono commented 2 years ago

不出意外下个release推送amo

ivysrono commented 2 years ago

碰到过fetch中文乱码,不知道有没有帮助:

/** 解决 Fetch 直接输出的中文乱码问题
 * https://segmentfault.com/q/1010000004338890
 * https://blog.shovonhasan.com/using-promises-with-filereader/
 * @param {Binary} https://developer.mozilla.org/docs/Web/API/FileReader/readAsText
 * @return {String}
 */
const binary2Text = async (input) => {
  let reader = new FileReader();
  return new Promise((resolve, reject) => {
    reader.onerror = () => {
      reader.abort();
      reject(new DOMException('Problem parsing input.'));
    };
    reader.onload = () => {
      resolve(reader.result);
    };
    reader.readAsText(input);
  });
};
jc3213 commented 2 years ago

你这个是promise file reader,跟这个根本不是一个问题……现在是获取content-disposition的内容时,这些开发者没按照规范使用ASCII字符串,直接输入中文或者Unicode字符导致乱码。即使你利用工具反向转回去,也不见得就正常……

jc3213 commented 2 years ago

比如北大法宝的乱码,丢进恢复工具里只能看到部分中文+大量问号,修复完毕也包含非法字符串? 输入 输出

jc3213 commented 2 years ago

试试看690?好歹抓取文件后缀应该是能工作了

ivysrono commented 2 years ago

试试看690?好歹抓取文件后缀应该是能工作了

--------------------------
https://mail.126.com/js6/read/readdata.jsp?sid=qAQBZlyFrxPkL…qT4+QAAsX&part=3&mode=download&l=read&action=download_attach
https://mail.126.com/js6/main.jsp?sid=qAQBZlyFrxPkLHPdmaFFyAyVKnfJNooC&df=mail163_letter background.js:46:9
attachment; filename="=?UTF8?B?5paw5bu65paH5pys5paH5qGjLnR4dA==?="
5paw5bu65paH5pys5paH5qGjLnR4dA==?=",5paw5bu65paH5pys5paH5qGjLnR4dA== background.js:101:9
�建���档.txt background.js:104:9
�建���档.txt background.js:48:9
Download start! 28c85fc084bc6f21 2 aria2.js:44:13
Download complete! 28c85fc084bc6f21 2 aria2.js:48:13
jc3213 commented 2 years ago

下载正常了,文件名呢?理论上我设置了又问题直接返回,就是不知道具体效果了。

不对,我发现条件做错了,有个地方之前因为要匹配正常的所以做了反向,现在没取消……等我再看看。

jc3213 commented 2 years ago

试试看691,这下应该不会出乱码了,就是文件名估计也不会好到哪去……应该跟北大法宝一样是个无关文件名。但这个没法子了。这些网站的content-disposition就不符合规范。