wget e URL codificado

12

Eu tenho um URL como este:

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

Quero baixar este URL usando wget. Se eu passar diretamente para wget, tudo vai bem. Mas estou em uma situação em que tenho apenas as versões codificadas dos URLs de download. Se eu passar a versão codificada do URL acima para wget, ele emitirá o seguinte erro:

$ 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 wgetalterou a caixa do URL (por exemplo, Khumbapara khumba). O que devo fazer para resolver este problema?

melmi
fonte

Respostas:

19

Como isso é irritantemente tão comum, existem vários conversores disponíveis - por exemplo, este site . Você pode usá-los para decodificar o URL - para que ele converta isso:

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

para:

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

Seria necessário ter uma versão de linha de comando ...

EDITAR:

Encontrei uma versão da linha de comando - basicamente:

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

Isso pode ser implementado em um script como este para decodificar o URL:

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

que, se salvo e tornado executável, funciona muito bem.

também este script, que fará o download do UL também:

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

NB : acho que o caso em que a URL está não é importante para a maioria dos sites - por exemplo,HTTP://WWW.UBUNTU.COM

Wilf
fonte
4
python -c 'import urllib2; print urllib2.unquote("'${URL}'")'faz aproximadamente o mesmo, se você colocar seu URL no URL da variável de ambiente.
#
3
O caso do domínio geralmente não é importante, mas o caso seguinte pode ser se o servidor usar roteamento com distinção entre maiúsculas e minúsculas ou não redirecionar URLs com maiúsculas e minúsculas diferentes para a página real. Caso em questão: developer.android.com/reference/android/view/View.html versus developer.android.com/reference/android/view/view.html .
JAB
7

Você deve usá-lo assim

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

Apenas substitua todos os espaços com %20. Ou melhor, copie o link original e cole-o na barra de endereço do navegador Chromium. Ele será formatado automaticamente para você. Agora copie de lá para o seu terminal.

g_p
fonte
2
Este método pode ser um risco de segurança em alguns casos. Se você já possui o Chromium aberto, provavelmente é a maneira mais rápida de pressionar [Ctrl]+[Shift]+[J](para o console de desenvolvimento) e inserir decodeURIComponent("your-decoded-URI").
ComFreek
4

O Wget espera que o URL tenha o seguinte formato:

[protocol://]host/path

O protocolo é opcional. Na ausência de protocolo , o Wget assume HTTP.

O Wget aceita URLs com porcentagem codificada, mas os delimitadores entre protocolo , host e caminho não podem ser codificados por porcentagem.

É também por isso que o Wget alterou a caixa do URL. Como não encontrou uma única barra não codificada, assume-se que

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

é o nome do host (que não diferencia maiúsculas de minúsculas). O nome real do host é, é claro dl.minitoons.ir,.

Para uma solução automática, substituir %3A%2F%2Fe %2Fdepois o nome do host por ://e /seria suficiente, mas também é fácil decodificar o URL em um. @ Wilf já deu uma boa solução para isso.

No entanto, se você digitar o comando Wget manualmente, faça o seguinte:

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

Você só precisa colocar aspas no URL e pronto:

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          

É mais fácil assim e você não precisa se envergonhar com as coisas.

Braiam
fonte
0

Acabei escrevendo um script python para ele.

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
fonte