wget 和编码的 URL

wget 和编码的 URL

我有一个这样的网址:

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))

相关内容