Questão Como wget um arquivo com nome correto quando redirecionado?


Então, depois de algum tempo pesquisando no Google e Super User (e varrendo páginas de manual), não consegui encontrar uma resposta para algo que (eu acho) deveria ser simples:

Se você for aqui:

http://www.vim.org/scripts/script.php?script_id=2340

E tente baixar o tema:

http://www.vim.org/scripts/download_script.php?src_id=9750

Igual a:

wget http://www.vim.org/scripts/download_script.php?src_id=9750

Você provavelmente terminará com um arquivo chamado download_script.php?src_id=9750.

Mas eu quero que seja chamado molokai.vim, que é o que aconteceria se eu usasse um navegador para baixar esse arquivo.

Quais opções eu preciso especificar para o wget para o efeito desejado?

Eu também ficaria bem com um comando equivalente Curl.


92


origem




Respostas:


-O file
--output-document=file

Os documentos não serão gravados nos arquivos apropriados, mas todos serão concatenados juntos e gravados no arquivo.          E se - é usado como arquivo, os documentos serão impressos na saída padrão, desativando a conversão de link. (Usar ./- para imprimir em um arquivo literalmente nomeado -.)

Assim,

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

Ou você pode ser capaz de obter wget para resolver isso usando a opção --content-disposition se suportada pela sua versão.

wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=9750

Advertências conforme a página man,

--content-disposition

Se isso estiver ativado, o suporte experimental (não totalmente funcional) para cabeçalhos "Content-Disposition" estará ativado. No momento, isso pode resultar em viagens de ida e volta extras para o servidor para uma solicitação "HEAD" e é conhecido por sofrer de alguns bugs, e é por isso que não está habilitado no momento por padrão.

Essa opção é útil para alguns programas CGI de download de arquivos que usam cabeçalhos "Content-Disposition" para descrever o nome do arquivo baixado.

Você pode obter o mesmo comportamento automatizado com curlusando,

curl -JLO http://www.vim.org/scripts/download_script.php?src_id=9750

-O usa o nome remoto e -J força o -O para obter esse nome do cabeçalho de disposição de conteúdo em vez do URL e -L segue redirecionamentos, se necessário.


139



Eu deveria ter especificado que isso precisa ser automático - audio.zoom
Pelo que entendi, o wget depende da página da web para informar corretamente se a URL aponta para um arquivo e ele precisa ser salvo com algo diferente, usando o cabeçalho de disposição de conteúdo, que wget pode ou não suportar totalmente. Então você não pode fazer isso automaticamente com o wget. Curl pode ter mais ou menos sucesso dependendo da página da web. - EightBitTony
o ponto é ser capaz de escrever essas coisas sem uma análise complicada, o curl é bom, mas até agora eu não consegui coletar opções decentes para isso - audio.zoom
Aha - eu estou errado, veja resposta atualizada. É por isso que os sites da stackexchange funcionam bem - todos aprendem alguma coisa, até mesmo as pessoas que respondem às perguntas! - EightBitTony
Isso funcionou para mim para o podcast de troca de pilha, que estava me incomodando há algum tempo. Obrigado. - Richard Campbell


Com o wget você pode fazer isso:

wget --trust-server-names <url> 

para salvar o arquivo usando o último nome de arquivo que o servidor lhe fornece.


69



Eu me pergunto qual é a diferença entre --trust-server-names e --content-disposition - JamesTheAwesomeDude
Parece --trust-server-names segue redirecionamentos para um arquivo diferente, e --content-disposition nomeia o arquivo com o nome especificado no cabeçalho de resposta sem qualquer redirecionamento necessário. - Asfand Qazi
Por que essa funcionalidade padrão não é?!?! - hopeseekr
@hopeseekr O servidor pode estar desobediente e chamar o arquivo .bashrc se você não estiver observando atentamente. lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html - Patrick Conheady


Você também pode usar aria2c - parece funcionar bem com os cabeçalhos Content-Disposition.


2





Apenas fyi curl redireciona bem, então usando o seguinte deve funcionar, eu acho que, pelo que você está procurando.

curl -o molokai.vim http://www.vim.org/scripts/download_script.php?src_id=9750


0





Trabalhou do seguinte:

curl -o molokai.vim http://www.vim.org/scripts/download_script.php?src_id=9750

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

(caso alterado para menor, ou seja, (o wget -O) para (wget -o)


0