wget y URL codificada

12

Tengo una URL como esta:

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

Quiero descargar esta URL usando wget. Si se lo paso directamente wget, todo va bien. Pero estoy en una situación en la que solo tengo las versiones codificadas de las URL de descarga. Si paso la versión codificada de la URL anterior a wget, arroja el siguiente error:

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

Observe que wgetcambió la carcasa de la URL (por ejemplo, Khumbaa khumba). ¿Qué debo hacer para resolver este problema?

melmi
fuente

Respuestas:

19

Como esto es molestamente tan común, hay varios convertidores disponibles, por ejemplo, este sitio . Puede usarlos para decodificar la URL, por lo que convertirá esto:

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

a:

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

Sin embargo, sería bueno tener una versión de línea de comando ...

EDITAR:

Encontré una versión de línea de comando, básicamente:

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

Esto se puede implementar en un script como este para decodificar la URL:

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

que si se guarda y se hace ejecutable, funciona bastante bien.

también este script, que también descargará la UL:

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

Nota : creo que el caso en el que se encuentra la URL no es importante para la mayoría de los sitios, por ejemploHTTP://WWW.UBUNTU.COM

Wilf
fuente
44
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'hace aproximadamente lo mismo, si coloca su URL en la URL de variable de entorno.
taneli
3
El caso del dominio generalmente no es importante, pero el caso de lo que viene después puede ser si el servidor usa enrutamiento sensible a mayúsculas o minúsculas o no redirige las URL con un caso diferente a la página real. Caso en cuestión: developer.android.com/reference/android/view/View.html versus developer.android.com/reference/android/view/view.html .
JAB
7

Deberías usarlo así

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

Simplemente reemplace cada espacio con %20. O mejor copie su enlace original y péguelo en la barra de direcciones del navegador Chromium. Lo formateará automáticamente para usted. Ahora cópielo desde allí a su terminal.

g_p
fuente
2
Este método puede ser un riesgo de seguridad en algunos casos. Si ya tiene Chromium abierto, probablemente sea la forma más rápida de presionar [Ctrl]+[Shift]+[J](para la consola de desarrollo) e insertar decodeURIComponent("your-decoded-URI").
ComFreek
4

Wget espera que la URL tenga el siguiente formato:

[protocol://]host/path

El protocolo es opcional. En ausencia de protocolo , Wget asume HTTP.

Wget acepta URL codificadas en porcentaje muy bien, pero los delimitadores entre protocolo , host y ruta no pueden codificarse en porcentaje.

Esta es también la razón por la cual Wget cambió la carcasa de la URL. Como no encontró una sola barra sin codificar, se supone que

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

es el nombre de host (que no distingue entre mayúsculas y minúsculas). El nombre de host real es, por supuesto, dl.minitoons.ir.

Para una solución automática, sustituir %3A%2F%2Fy %2Fdespués del nombre de host por ://y /sería suficiente, pero es igual de fácil decodificar la URL a la vez. @Wilf ya dio una buena solución para esto.

Sin embargo, si va a escribir el comando Wget manualmente, simplemente haga esto:

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

Solo necesita poner comillas alrededor de la url y listo:

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          

Así es más fácil y no tienes que avergonzarte con cosas.

Braiam
fuente
0

Terminé escribiendo un script de Python para ello.

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
fuente