Como baixar arquivos com o wget, onde a página faz você esperar pelo download?

32

Estou tentando baixar um arquivo do sourceforge usando o wget, mas como todos sabemos, precisamos clicar no botão de download e aguardar o download automático. como você baixa esse tipo de arquivo usando o wget?

Estou tentando fazer o download: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

Mas fazer um wget nesse link de URL não me levaria o arquivo, pois o arquivo é carregado automaticamente pelo navegador.

Patoshi パ ト シ
fonte
3
Ir para essa página no navegador da web também deve listar um Link Direto - você pode usar o wget com isso?
BriGuy
Se você deseja preservar o nome verdadeiro do arquivo (em vez de "baixar"), basta invocá-lo como #wget --trust-server-names URL
Adam Katz

Respostas:

5

Não tenho certeza de qual versão do wgetsistema operacional e de qualquer proxy existe entre você e o sourceforge, mas wgetbaixei o arquivo quando removi o "/ download" e o deixei na extensão do arquivo.

Não quero inundar a postagem ou colar na minha sessão inteira, mas recebi os códigos de status 302 e 200 antes da transferência começar. O que acontece quando você tenta wget?

Resolving downloads.sourceforge.net... 216.34.181.59
Connecting to downloads.sourceforge.net|216.34.181.59|:80... connected.
HTTP request sent, awaiting response... 302 Found

[snipped for brevity]

HTTP request sent, awaiting response... 200 OK
Length: 13432789 (13M) [application/x-gzip]
Saving to: `download'
Karen3819x4
fonte
Também é importante notar: ocasionalmente, a página “download” é uma lista de espelhos e um script que fornece um deles quando um certo atraso decorre. SourceForge há 10 anos fez isso.
Can-ned_food 4/06
47

Eu sugeriria usar curlpara fazer isso em vez de wget. Ele pode seguir o redirecionamento usando os interruptores -L, -Je -O.

curl -O -J -L http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

mudar definições

-O/--remote-name
  Write output to a local file named like the remote file we get. 
  (Only the file part of the remote  file  is  used, the path is cut off.)

-L/--location
  (HTTP/HTTPS)  If  the  server  reports that the requested page has moved 
  to a different location (indicated with a Location: header and a 3XX 
  response code), this option will make curl redo the request on the new 
  place.  If  used together  with  -i/--include  or -I/--head, headers from 
  all requested pages will be shown. When authentication is used, curl only 
  sends its credentials to the initial host. If a redirect takes curl to a 
  different host, it  won't be  able  to  intercept  the  user+password. 
  See also --location-trusted on how to change this. You can limit the
  amount of redirects to follow by using the --max-redirs option.

-J/--remote-header-name
  (HTTP) This option tells the -O/--remote-name option to  use  the  
  server-specified  Content-Disposition  filename instead of extracting a 
  filename from the URL.

Veja a página de manual curl para mais detalhes.

slm
fonte
2
Não há necessidade de utilização onda, wgetpode seguir redirecionamentos, mas não fazê-lo a menos que você aumentar a --max-redirectpartir do padrão, que por razões de segurança é, naturalmente, 0.
Anthon
wgetO padrão de 1.19.2 é o --max-redirect=20que deve ser bom o suficiente para a maioria dos usos. Não sei ao certo quando isso mudou ... ou por que isso era necessário para segurança (citação necessária!), Mas meu palpite é que a solução preferida atual era seguir os redirecionamentos e, em vez disso, exigir --trust-server-namesa preservação do nome fornecido por um destino de redirecionamento em vez de " download "ou" index.html? blah = barg "ou o que o URL fornecido usar.
Adam Katz
Caso isso ajude alguém, veja como me lembro das opções corretas. Pense na Jennifer Lopez. JLO. curl -JLO http://www.example.com/file.ext
Carl
15

Em wgetque você pode usar --content-dispositiona opção que é útil para alguns programas CGI-download de arquivos que usam cabeçalhos "Content-Disposition" para descrever o que o nome de um arquivo baixado deve ser.

No exemplo:

wget --user-agent=Mozilla --content-disposition -E -c http://example.com/

Para soluções mais complexas (como é necessária autorização), use o arquivo de cookie ( --load-cookies file) para simular sua sessão.

kenorb
fonte