wget i zakodowany adres URL

12

Mam taki adres URL:

http://dl.minitoons.ir/longs/Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar

Chcę pobrać ten adres URL za pomocą wget. Jeśli przekażę to bezpośrednio wget, wszystko pójdzie dobrze. Ale jestem w sytuacji, że mam tylko zakodowane wersje adresów URL pobierania. Jeśli przekażę zakodowaną wersję adresu URL powyżej wget, generuje następujący błąd:

$ 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'

Zauważ, że wgetzmieniłem wielkość liter URL (na przykład Khumbana khumba). Co powinienem zrobić, aby rozwiązać ten problem?

melmi
źródło

Odpowiedzi:

19

Ponieważ jest to irytujące, często dostępne są różne konwertery - np. Ta strona . Możesz użyć ich do zdekodowania adresu URL - aby przekonwertować to:

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

do:

http://dl.minitoons.ir/longs/Khumba (2013) [EN] [BR-Rip 720p] - [www.minitoons.ir].rar

Byłoby jednak fajnie mieć wersję wiersza poleceń ...

EDYTOWAĆ:

Znaleziono wersję wiersza poleceń - w zasadzie:

echo "http%3A%2F%2F-REST-OF-URL" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e

Można to zaimplementować w takim skrypcie, aby zdekodować adres URL:

#!/bin/bash
echo "$@" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e
exit

który, jeśli został zapisany i wykonany, działa całkiem nieźle.

także ten skrypt, który również pobierze UL:

#!/bin/bash
echo "$@" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e | wget -c -i -
exit

Uwaga: Myślę, że przypadek adresu URL nie jest ważny dla większości witryn - npHTTP://WWW.UBUNTU.COM

Wilf
źródło
4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'robi się mniej więcej tak samo, jeśli umieścisz swój adres URL w zmiennej URL środowiska.
taneli
3
Sprawa dla domeny na ogół nie jest ważna, ale przypadek późniejszy może mieć miejsce, jeśli serwer używa routingu z rozróżnianiem wielkości liter lub nie przekierowuje adresów URL z inną wielkością liter do faktycznej strony. Przykład: developer.android.com/reference/android/view/View.html kontra developer.android.com/reference/android/view/view.html .
JAB
7

Powinieneś użyć tego w ten sposób

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

Po prostu zamień każde miejsce na %20. Lub Lepiej skopiuj oryginalny link i wklej go w pasku adresu przeglądarki Chromium. Automatycznie go sformatuje. Teraz skopiuj go stamtąd do terminala.

g_p
źródło
2
W niektórych przypadkach ta metoda może stanowić zagrożenie bezpieczeństwa. Jeśli masz już Chromium otwarty, jest to prawdopodobnie najszybszy sposób na naciśnięcie [Ctrl]+[Shift]+[J](w konsoli programisty) i wstawienie decodeURIComponent("your-decoded-URI").
ComFreek
4

Wget oczekuje, że adres URL będzie miał następujący format:

[protocol://]host/path

Protokół jest opcjonalny. W przypadku braku protokołu Wget zakłada HTTP.

Wget dobrze akceptuje adresy URL zakodowane procentowo, ale separatory między protokołem , hostem i ścieżką nie mogą być zakodowane procentowo.

Z tego też powodu Wget zmieniła obudowę adresu URL. Ponieważ nie znalazł ani jednego niekodowanego ukośnika, zakłada to

http://dl.minitoons.ir/longs/khumba (2013) [en] [br-rip 720p] - [www.minitoons.ir].rar

to nazwa hosta (która nie rozróżnia wielkości liter). Rzeczywista nazwa hosta to oczywiście dl.minitoons.ir.

W przypadku rozwiązania automatycznego wystarczy zastąpić %3A%2F%2Fi %2Fpo nazwie hosta znakiem ://i /, ale równie łatwo można odkodować adres URL jednocześnie. @ Wilf dał już dobre rozwiązanie tego problemu.

Jeśli jednak chcesz ręcznie wpisać polecenie Wget, po prostu wykonaj następujące czynności:

wget "dl.minitoons.ir/longs%2FKhumba%20(2013)%20%5BEN%5D%20%5BBR-Rip%20720p%5D%20-%20%5Bwww.minitoons.ir%5D.rar"
Dennis
źródło
1

Wystarczy umieścić cytaty wokół adresu URL i wykonać:

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          

Jest to łatwiejsze i nie musisz zawstydzać się rzeczami.

Braiam
źródło
0

W końcu napisałem do niego skrypt Pythona.

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
źródło