wget e URL codificato


12

Ho un URL come questo:

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

Voglio scaricare questo URL usando wget. Se lo passo direttamente a wget, tutto va bene. Ma mi trovo in una situazione in cui ho solo le versioni codificate degli URL di download. Se passo la versione codificata dell'URL sopra a wget, viene generato il seguente errore:

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

Si noti che ha wgetcambiato il case dell'URL (ad esempio Khumbain khumba). Cosa devo fare per risolvere questo problema?

Risposte:


19

Dato che questo è fastidiosamente così comune, ci sono vari convertitori disponibili, ad esempio questo sito . Puoi usarli per decodificare l'URL, quindi convertirà questo:

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

per:

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

Sarebbe bello avere una versione da riga di comando però ...

MODIFICARE:

Trovato una versione da riga di comando - sostanzialmente:

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

Questo può essere implementato in uno script come questo per decodificare l'URL:

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

che se salvato e reso eseguibile, funziona abbastanza bene.

anche questo script, che scaricherà anche l'UL:

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

NB Penso che il caso in cui si trova l'URL non sia importante per la maggior parte dei siti, ad esHTTP://WWW.UBUNTU.COM


4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'fa circa lo stesso, se inserisci l'URL nell'URL della variabile di ambiente.
Taneli,

3
Il caso per il dominio non è generalmente importante, ma il caso di ciò che viene dopo può essere se il server utilizza il routing con distinzione tra maiuscole e minuscole o non reindirizza URL con caso diverso alla pagina effettiva. Caso in questione: developer.android.com/reference/android/view/View.html contro developer.android.com/reference/android/view/view.html .
JAB

7

Dovresti usarlo in questo modo

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

Sostituisci semplicemente ogni spazio con %20. O meglio copiare il collegamento originale e incollarlo nella barra degli indirizzi del browser Chromium. Lo formatterà automaticamente per te. Ora copialo da lì sul tuo terminale.


2
Questo metodo può rappresentare un rischio per la sicurezza in alcuni casi. Se hai già Chromium aperto, è probabilmente il modo più veloce per premere [Ctrl]+[Shift]+[J](per la console di sviluppo) e inserire decodeURIComponent("your-decoded-URI").
ComFreek

4

Wget si aspetta che l'URL abbia il seguente formato:

[protocol://]host/path

Il protocollo è facoltativo In assenza di protocollo , Wget assume HTTP.

Wget accetta bene URL con codifica percentuale, ma i delimitatori tra protocollo , host e percorso non possono essere codificati in percentuale.

Questo è anche il motivo per cui Wget ha cambiato il case dell'URL. Dal momento che non ha trovato una singola barra non codificata, presuppone che

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

è il nome host (che non distingue tra maiuscole e minuscole). Il nome host reale è, naturalmente, dl.minitoons.ir.

Per una soluzione automatica, sostituire %3A%2F%2Fe %2Fdopo il nome host con ://e /sarebbe sufficiente, ma è altrettanto facile decodificare l'URL in una sola. @Wilf ha già dato una buona soluzione per questo.

Tuttavia, se hai intenzione di digitare manualmente il comando Wget, fai questo:

wget "dl.minitoons.ir/longs%2FKhumba%20(2013)%20%5BEN%5D%20%5BBR-Rip%20720p%5D%20-%20%5Bwww.minitoons.ir%5D.rar"

1

Hai solo bisogno di mettere le virgolette intorno all'URL e fatto:

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          

È più facile in questo modo e non devi metterti in imbarazzo con le cose.


0

Ho finito per scrivere uno script Python per questo.

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))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.