wget和编码的URL


12

我有这样的网址:

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的壳体(例如Khumbakhumba)。我该怎么做才能解决这个问题?

Answers:


19

由于这很烦人,因此有各种可用的转换器-例如,此站点。您可以使用它们来解码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

注意:我认为网址所在的情况对于大多数网站而言并不重要-例如HTTP://WWW.UBUNTU.COM


4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'如果将url放在环境变量URL中,则效果大致相同。
taneli 2014年

3
域的大小写通常并不重要,但是如果服务器使用区分大小写的路由,或者不将大小写不同的URL重定向到实际页面,那么后面的情况可能是这样。恰当的例子:developer.android.com/reference/android/view/View.htmldeveloper.android.com/reference/android/view/view.html
JAB 2014年

7

你应该这样使用

wget "http://dl.minitoons.ir/longs/Khumba%20(2013)%20[EN]%20[BR-Rip%20720p]%20-%20[www.minitoons.ir].rar"`

只需用替换每个空格%20。或者更好地复制您的原始链接并将其粘贴到Chromium浏览器地址栏中。它将自动为您格式化。现在将其从那里复制到您的终端。


2
在某些情况下,此方法可能会带来安全风险。如果您已经打开Chromium,则可能是按[Ctrl]+[Shift]+[J](对于开发人员控制台)并插入的最快方法decodeURIComponent("your-decoded-URI")
ComFreek 2014年

4

Wget希望URL具有以下格式:

[protocol://]host/path

协议是可选的。在没有协议的情况下,Wget采用HTTP。

Wget可以很好地接受百分比编码的URL,但是protocolhostpath之间的分隔符不能进行百分比编码。

这也是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"

1

您只需要在网址两边加上引号即可完成:

wget "http://dl.minitoons.ir/longs/Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar"
Warning: wildcards not supported in HTTP.
--2014-03-02 20:40:20--  http://dl.minitoons.ir/longs/Khumba%20(2013)%20[EN]%20[BR-Rip%20720p]%20-%20[www.minitoons.ir].rar
Resolving dl.minitoons.ir (dl.minitoons.ir)... 79.127.127.41
Connecting to dl.minitoons.ir (dl.minitoons.ir)|79.127.127.41|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 594062365 (567M) [application/x-rar-compressed]
Saving to: ‘Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar’

 0% [                                       ] 73,288      44.9KB/s          

这样比较容易,您不必为自己的事情感到尴尬。


0

我最终为它编写了一个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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.