Wget и закодированный URL

12

У меня есть такой 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). Что я должен сделать, чтобы решить эту проблему?

melmi
источник

Ответы:

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

NB Я думаю, что случай, в котором находится URL, не важен для большинства сайтов - например,HTTP://WWW.UBUNTU.COM

Уилф
источник
4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'делает примерно то же самое, если вы поместите свой URL в URL переменной среды.
Танели
3
Случай для домена, как правило, не важен, но случай для последующего может быть, если сервер использует маршрутизацию с учетом регистра или не перенаправляет URL с другим регистром на фактическую страницу. Показательный пример: developer.android.com/reference/android/view/View.html против developer.android.com/reference/android/view/view.html .
JAB
7

Вы должны использовать это так

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

Просто замените все пробелы на %20. Или лучше скопируйте исходную ссылку и вставьте ее в адресную строку браузера Chromium. Он автоматически отформатирует его для вас. Теперь скопируйте его оттуда на свой терминал.

G_p
источник
2
Этот метод может быть угрозой безопасности в некоторых случаях. Если у вас уже открыт Chromium, возможно, это самый быстрый способ нажать [Ctrl]+[Shift]+[J](для консоли разработчика) и вставить decodeURIComponent("your-decoded-URI").
ComFreek
4

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"
Деннис
источник
1

Вам нужно только поставить кавычки вокруг URL и готово:

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          

Это проще, и вам не нужно смущаться.

Braiam
источник
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))
Frigen
источник