quinta-feira, 5 de maio de 2011

Usando Wget para baixar arquivos protegidos contra programas de download

Experiência própria. Já passei por alguns sites que insistem em somente permitir o download de arquivos se você estiver usando o próprio browser. E como nós bem sabemos, os browsers não têm gerenciadores de download tão inteligentes.

No linux, não há nenhum gerenciador de downloads que se integre facilmente aos browsers (até há, o download'em all). Para estes casos, podemos sempre recorrer ao gerenciador de downloads de linha de comando, wget.

Eu já falei um pouco dele em um post passado. No entanto, nunca falei sobre características avançadas, como permitir que você use informações de sessão ou alterar informações do cabeçalho. E são estas características que usaremos para baixar arquivos que não se deixam baixar tão facilmente...



Então, há vários sites por aí (principalmente sites de patches para jogos) que não permitem que você use gerenciadores de downloads. O por quê? Pois assim, se o seu download der pau, você precisará entrar novamente no site e gerar receita de publiciddade pra eles para poder baixar o arquivo. Isso é um inconveniente, que pode ser feito de três formas:
  • Usar a informação UserAgent do cabeçalho para identificar o browser;
  • A página de download setar um cookie, que é verificado na hora de baixar o arquivo;
  • Usar a informação Referer do cabeçalho para forçar o usuário a fazer o download a partir de uma página específica.
Para cada uma destas opções, você pode usar um parâmetro diferente no wget.

UserAgent

Como alguns sites só permitem o download usando browsers, você pode falsificar a identificação do wget usando o parâmetro --user-agent, da seguinte forma:
  • Google Chrome 10.0.648.133 no Windows 7: --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"
  • Firefox 4 no Ubuntu 11.04 Natty Narwhal: --user-agent="Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
  • Safari 5.0.4 no MacOS X 10.6.6 Snow Leopard--user-agent="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27"
  • Opera 11 no Windows 7--user-agent="Opera/9.80 (Windows NT 6.0; U; en) Presto/2.7.62 Version/11.00"
Cookie

Quando o site usa cookies, a técnica é um pouco diferente. Primeiramente você precisa carregar a página que cria o cookie e armazenar o mesmo em um arquivo. Depois, você inicia o download do arquivo, indicando o caminho do cookie que deverá ser utilizado. Exemplo:
  • wget --cookies=on --keep-session-cookies --save-cookies=cookie.txt http://www.site.com.br/download.php
  • wget --cookies=on --load-cookies=cookie.txt --keep-session-cookies --save-cookies=cookie.txt http://download.site.com.br/blah/arquivo.iso
Referal

Por último, alguns servidores só permitem baixar arquivos se ele for baixado de uma página específica. Provavelmente a página de download de um site. Você pode fazer o download usando a seguinte sintaxe do wget:
  • wget --referer=http://www.site.com.br/download.php http://download.site.com.br/blah/arquivo.iso
Conclusão

Pode ser um pouco complexo de detectar tais opções na hora de fazer um download no wget e determinar qual delas irá funcionar de verdade. No entanto, nada impede que você use todas as técnicas juntas. As vezes, a ferramenta simples que você usa no dia-a-dia pode ser mostrar muito mais eficiente do que você originalmente esperava. É o caso do wget.

Até mais.

Fonte:
The Geek Stuff: The Ultimate Wget Download Guide With 15 Awesome Examples