wget et URL encodée

12

J'ai une URL comme celle-ci:

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

Je souhaite télécharger cette URL à l'aide de wget. Si je le passe directement à wget, tout se passe bien. Mais je suis dans une situation où je n'ai que les versions codées des URL de téléchargement. Si je transmets la version codée de l'URL ci-dessus à wget, cela génère l'erreur suivante:

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

Notez que wgetla casse de l'URL a changé (par exemple Khumbaen khumba). Que dois-je faire pour résoudre ce problème?

melmi
la source

Réponses:

19

Comme cela est très courant, il existe différents convertisseurs disponibles, par exemple ce site . Vous pouvez les utiliser pour décoder l'URL - il convertira donc ceci:

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

Il serait cependant préférable d'avoir une version en ligne de commande ...

ÉDITER:

Trouvé une version en ligne de commande - essentiellement:

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

Cela peut être implémenté dans un script comme celui-ci pour décoder l'URL:

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

qui, s'il est enregistré et rendu exécutable, fonctionne très bien.

également ce script, qui téléchargera également 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 Je pense que le cas où l'URL est n'est pas important pour la plupart des sites - par exempleHTTP://WWW.UBUNTU.COM

Wilf
la source
4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'fait à peu près la même chose, si vous mettez votre URL dans l'URL de variable d'environnement.
taneli
3
Le cas pour le domaine n'est généralement pas important, mais le cas pour ce qui vient après peut être si le serveur utilise un routage sensible à la casse ou ne redirige pas les URL avec un cas différent vers la page réelle. Exemple: developer.android.com/reference/android/view/View.html contre developer.android.com/reference/android/view/view.html .
JAB
7

Vous devez l'utiliser comme ceci

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

Remplacez simplement chaque espace par %20. Ou mieux copiez votre lien d'origine et collez-le dans la barre d'adresse du navigateur Chromium. Il le formatera automatiquement pour vous. Copiez-le à partir de là vers votre terminal.

g_p
la source
2
Cette méthode peut constituer un risque pour la sécurité dans certains cas. Si vous avez déjà ouvert Chromium, c'est probablement le moyen le plus rapide d'appuyer [Ctrl]+[Shift]+[J](pour la console de développement) et d'insérer decodeURIComponent("your-decoded-URI").
ComFreek
4

Wget s'attend à ce que l'URL ait le format suivant:

[protocol://]host/path

Le protocole est facultatif. En l'absence de protocole , Wget suppose HTTP.

Wget accepte très bien les URL encodées en pourcentage, mais les délimiteurs entre le protocole , l' hôte et le chemin ne peuvent pas être encodés en pourcentage.

C'est aussi pourquoi Wget a changé le boîtier de l'URL. Puisqu'il n'a trouvé aucune barre oblique non codée, il suppose que

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

est le nom d'hôte (qui ne respecterait pas la casse). Le nom d' hôte est, bien sûr, dl.minitoons.ir.

Pour une solution automatique, remplacer %3A%2F%2Fet %2Faprès le nom d'hôte par ://et /suffirait, mais il est tout aussi facile de décoder l'URL à la fois. @Wilf a déjà donné une bonne solution pour cela.

Cependant, si vous allez taper manuellement la commande Wget, procédez comme suit:

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

Il vous suffit de mettre des guillemets autour de l'url et de faire:

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          

C'est plus facile de cette façon et vous n'avez pas à vous embarrasser avec des trucs.

Braiam
la source
0

J'ai fini par écrire un script python pour cela.

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
la source