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) Що мені робити, щоб вирішити цю проблему?

Відповіді:


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

Було б niCe мати версію командного рядка, хоча ...

Редагувати:

Знайдена версія командного рядка - в основному:

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-середовище.
taneli

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. Він автоматично відформатує його для вас. Тепер скопіюйте його звідти на свій термінал.


2
Цей метод може становити загрозу безпеці в деяких випадках. Якщо у вас вже відкритий Chromium, це, мабуть, найшвидший спосіб натиснути [Ctrl]+[Shift]+[J](для консолі розробника) та вставити decodeURIComponent("your-decoded-URI").
ComFreek

4

Wget очікує, що URL має такий формат:

[protocol://]host/path

Протокол НЕ є обов'язковим. За відсутності протоколу , Wget приймає HTTP.

Wget просто добре сприймає URL-кодовані 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          

Так легше, і вам не доведеться бентежити себе.


0

Я закінчив написати сценарій пітона для цього.

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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.