我有一个这样的网址:
http://dl.minitoons.ir/longs/Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar
我想使用 下载此 URL wget
。如果我将其直接传递给wget
,则一切顺利。但我的情况是,我只有下载 URL 的编码版本。如果我将上述 URL 的编码版本传递给wget
,它会引发以下错误:
$ wget "http%3A%2F%2Fdl.minitoons.ir%2Flongs%2FKhumba%20(2013)%20%5BEN%5D%20%5BBR-Rip%20720p%5D%20-%20%5Bwww.minitoons.ir%5D.rar"
wget: unable to resolve host address `http://dl.minitoons.ir/longs/khumba (2013) [en] [br-rip 720p] - [www.minitoons.ir].rar'
请注意,wget
更改了 URL 的大小写(例如Khumba
更改为khumba
)。我应该怎么做才能解决这个问题?
答案1
由于这种情况很常见,因此有各种转换器可用 - 例如本网站。您可以使用它们来解码 URL - 因此它将转换以下内容:
http%3A%2F%2Fdl.minitoons.ir%2Flongs%2FKhumba%20(2013)%20%5BEN%5D%20%5BBR-Rip%20720p%5D%20-%20%5Bwww.minitoons.ir%5D.rar
到:
http://dl.minitoons.ir/longs/Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar
不过如果有命令行版本就更好了……
编辑:
找到了一个命令行版本-基本上:
echo "http%3A%2F%2F-REST-OF-URL" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e
这可以在如下脚本中实现以解码 URL:
#!/bin/bash
echo "$@" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e
exit
如果保存并使其可执行,则运行相当良好。
此脚本也将下载 UL:
#!/bin/bash
echo "$@" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e | wget -c -i -
exit
注意:我认为 URL 的大小写对于大多数网站来说并不重要 - 例如HTTP://WWW.UBUNTU.COM
答案2
你应该像这样使用它
wget "http://dl.minitoons.ir/longs/Khumba%20(2013)%20[EN]%20[BR-Rip%20720p]%20-%20[www.minitoons.ir].rar"`
只需将每个空格替换为%20
。或者最好复制原始链接并将其粘贴到 Chromium 浏览器地址栏中。它会自动为您格式化。现在将其从那里复制到您的终端。
答案3
Wget 期望 URL 具有以下格式:
[protocol://]host/path
这协议是可选的。如果没有协议,Wget 假定使用 HTTP。
Wget 可以很好地接受百分比编码的 URL,但是协议,主持人和小路不能进行百分比编码。
这也是 Wget 更改 URL 大小写的原因。由于它没有找到单个未编码的斜杠,因此它假设
http://dl.minitoons.ir/longs/khumba (2013) [en] [br-rip 720p] - [www.minitoons.ir].rar
是主机名(不区分大小写)。实际主机名当然是dl.minitoons.ir
。
对于自动解决方案,用%3A%2F%2F
和替换%2F
主机名后面的://
和/
就足够了,但一次性解码 URL 也同样容易。@Wilf 已经为此提供了一个很好的解决方案。
但是,如果您要手动输入 Wget 命令,只需执行以下操作:
wget "dl.minitoons.ir/longs%2FKhumba%20(2013)%20%5BEN%5D%20%5BBR-Rip%20720p%5D%20-%20%5Bwww.minitoons.ir%5D.rar"
答案4
我最终为它编写了一个 Python 脚本。
from os import listdir, rename
from urllib.parse import unquote # py2: from urllib import unquote
os.chdir('/mydir/')
for filename in listdir('.'):
rename(filename, unquote(filename))