Questão Como baixar arquivos da linha de comando no Windows, como wget ou curl


Como posso baixar algo da Web diretamente sem o Internet Explorer ou o Firefox abrindo o Acrobat Reader / Quicktime / MS Word / o que for?

Estou usando o Windows, então uma versão do Windows Wget faria.


282


origem


Basta clicar com o botão direito em um arquivo e clicar em "Salvar destino como" ou "Salvar link como" ou "Salvar como" (o idioma varia dependendo do navegador) funcionará. - BrainSlugs83
O ponto de ter um comando é poder escrever um arquivo de lote e executá-lo (talvez agendado como uma tarefa) sempre que desejar. É aí que a GUI fica aquém. - Jbm
Como você faz o download com o MS Word? - Jaime Hablutzel
@JaimeHablutzel Por que você iria querer baixar algo via MS Word? MS Word não é um terminal. - Braden Best
@SDsolar Ou apenas melhorar / melhorar esta resposta abaixo. - Franklin Yu


Respostas:


Wget para Windows Deveria trabalhar.

De FAQ do Wget Wiki:

GNU Wget é um utilitário de rede gratuito para recuperar arquivos do mundo   Wide Web usando HTTP e FTP, os dois mais utilizados Internet   protocolos. Funciona de forma não interativa, permitindo assim o trabalho no   fundo, depois de ter terminado.

A partir de esta seção de FAQ, links de download são sugeridos:

Binários do Windows

Link com cortesia de Jernej Simončič é usado em seu lugar.


155



Tem também o Winwget cybershade.us/winwget se você preferir um gui - Col
A versão autônoma pode ser baixada em esse link. - Vito Gentile
Mais recente, até atualizada (a partir de hoje) Windows constrói, fornecido por Jernej Simončič - Gras Double
Link quebrado @VitoShadow - The Red Pea
@cixelsyd Link atualizado para fonte alternativa. - clearkimura


Uma alternativa que descobri recentemente, usando o PowerShell:

$client = new-object System.Net.WebClient
$client.DownloadFile("http://www.xyz.net/file.txt","C:\tmp\file.txt")

Funciona bem com as consultas GET.

Se você precisar especificar credenciais para baixar o arquivo, adicione a seguinte linha entre:

$client.Credentials =  Get-Credential                

Um prompt de credenciais padrão do Windows será exibido. As credenciais que você inserir lá serão usadas para baixar o arquivo. Você só precisa fazer isso uma vez para todo o tempo em que você usar o objeto $ client.


272



Você também pode fazer isso em uma linha: (new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt') - schellack
O powershell do @Rob é incorporado ao Windows ... - nhinkle♦
Do Vista para cima, sim. - Arran
@ BrainSlugs83, absolutamente, mas muitos, muitos, as pessoas ainda estão usando o XP. É meramente algo para ter em mente. - Arran
@ BrainSlugs83, você subestima a quantidade de pessoas que ainda estão em sistemas Windows mais antigos. Eu não entendo o problema, eu indiquei que é só no Vista para cima. As pessoas podem optar por ignorá-lo ou dizer "ei obrigado!", Mas você ...? Se você tiver um problema, crie um bate-papo e poderemos conversar. Alguém com rep (como você) deve perceber Aqui não é o lugar para esta discussão. - Arran


Se você tiver o PowerShell> = 3.0, poderá usar Invoke-WebRequest

Invoke-WebRequest -OutFile index.html http://superuser.com

Ou golfado

iwr -outf index.html http://superuser.com

Baixe um arquivo via HTTP no Windows


64



Isso não funciona com redirecionamentos no sourceforge (e possivelmente em outros sites), em oposição a System.Net.WebClient. No entanto, você pode fazer Invoke-WebRequest trabalhar adicionando -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox. - Ela782
Esta é a resposta certa agora, @ CédricBelin está certo. A pergunta e a resposta aceita são bem antigas. - Factor Mystic
Para executar isso a partir de um terminal cmd: powershell -command "& {&'iwr' index.html http://superuser.com}" - dario_ramos
Existe uma opção para ver o progresso do download? - Franklin Yu
@FranklinYu o progresso mostrará se o arquivo é grande o suficiente - Steven Penny


O Windows tem seu próprio utilitário de download de linha de comando - BITSAdmin:

O BITSAdmin é uma ferramenta de linha de comando que você pode usar para criar o download   ou fazer upload de trabalhos e monitorar seu progresso.

EDITAR: 26.01.15 - Aqui está minha visão geral de como um arquivo pode ser baixado no Windows sem ferramentas externas 

E um exemplo completo de bitsadmin:

bitsadmin /transfer myDownloadJob /download /priority normal http://downloadsrv/10mb.zip c:\10mb.zip

Editar : 15.05.2018 - acabou que é possível baixar um arquivo com certutil também:

certutil.exe -urlcache -split -f "https://download.sysinternals.com/files/PSTools.zip" pstools.zip

O Certutil não é instalado por padrão no XP / Win2003, mas está disponível nas versões mais novas do Windows. Para XP / 2003 você Admin Tool Pack para o Windows Server 2003


39



Interessante. Esse é um software desajeitado comparado ao wget. - Matt H
Note que ele não é fornecido com o Windows XP, e talvez não com outras versões também. - Ian Dunn
Atualização: o BITSAdmin está obsoleto e não tem garantia de estar disponível em versões futuras do Windows. Ferramentas administrativas para o serviço BITS agora são fornecidas pelos cmdlets do BITS PowerShell. - nulldev07
@MattH: porque não é para ser wget em primeiro lugar? - Vejo en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service - peterchen
Não é possível adicionar o arquivo - 0x80070057 - Tomáš Zato


Salve o seguinte texto como wget.js e simplesmente ligue

cscript /nologo wget.js http://example.com

Este é o código:

var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false);
WinHttpReq.Send();
WScript.Echo(WinHttpReq.ResponseText);

/* To save a binary file use this code instead of previous line
BinStream = new ActiveXObject("ADODB.Stream");
BinStream.Type = 1;
BinStream.Open();
BinStream.Write(WinHttpReq.ResponseBody);
BinStream.SaveToFile("out.bin");
*/

28



Em que idioma esse script está? Parece útil para minha tarefa atual. Eu gostaria de encontrar mais documentação de referência. Não parece muito com vb - G-.
Útil para arquivos únicos. Precisa melhorar para download recursivo e https. - opticyclic
@ G-. Estou atrasado para a festa, mas isso é JavaScript. - prooffreader
Eu tentei fazer isso por database.clamav.net/daily.cvd, mas baixou apenas 88kB de 44MB :( - kokbira


Fiz um arquivo myGet.bat rápido que chama o método PowerShell descrito acima.

@Echo OFF
SetLocal EnableDelayedExpansion
Set Var=%1
Set Var=!Var:http://=!
Set Var=!Var:/=,!
Set Var=!Var:%%20=?!
Set Var=!Var: =?!
Call :LOOP !var!
Echo.Downloading: %1 to %~p0!FN!
powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('%1','%~p0!FN!')
GoTo :EOF
:LOOP
If "%1"=="" GoTo :EOF
Set FN=%1
Set FN=!FN:?= !
Shift
GoTo :LOOP

Eu peguei emprestado algum código de URL de análise do nome do arquivo com espaço.


16



porque o downvote? isso parece certo para mim e é uma resposta direta à pergunta. Sim, é desajeitado e poderia usar melhorias, como escapar do "e" comercial (&) na url, mas funciona como está. - matt wilkie


Existe um cURL nativo para Windows disponível Aqui. Existem muitos sabores disponíveis - com e sem suporte SSL.

Você não precisa da bagagem extra de Cygwin e os gostos, apenas um pequeno arquivo EXE.


Também é importante saber que existem wget e curl aliases incorporados em todas as versões modernas do Windows Powershell. Eles são equivalentes.

Nenhum arquivo extra ou downloads são necessários para obter wgetfuncionalidade:

Usando Curl Em Powershell (O geek sociável)

Excerto:

Você pode digitar um comando cURL como aquele que baixa um arquivo de um   Repositório GitHub.

ondulação http://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json

e vai parecer que funciona, mas o que está realmente fazendo é apenas   usando cURL como um alias. No exemplo acima, o que acontecerá é   que você apenas obterá os cabeçalhos em vez do próprio arquivo.

Os aliases no PowerShell permitem criar atalhos para comandos mais longos, para que você não precise digitá-los o tempo todo.

Se você digitar o comando Get-Alias, ele fornecerá uma lista de todos os aliases usados ​​no PowerShell. Como você pode ver, o comando curl apenas chama o comando Invoke-WebRequest. Eles são semelhantes, mas não o mesmo, e é por isso que a solicitação acima não funciona para nós.

enter image description here

Para que isso funcione corretamente no PowerShell, a maneira mais fácil é usar variáveis ​​e -OutFile argumento como mostrado aqui:

enter image description here

(nome do arquivo cortado na imagem “https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json")

Esta sintaxe fará o download do conteúdo completo do arquivo de destino azuredeploy.json para o arquivo local newfile.json


A principal vantagem é que ele é embutido no próprio Powershell, portanto, esse código será executado diretamente sem nenhum download ou qualquer outra criação de arquivo extra será necessária para que ele funcione em qualquer versão moderna do Windows.


15



Isso pode ser feito diretamente em uma linha, mas a linha fica muito longa e não é imediatamente legível de imediato. - SDsolar
A melhor maneira, obrigado - Konstantin Chernov


Eu estava procurando o mesmo, e desde que eu não tive nenhum privilégio para instalar qualquer um dos pacotes acima, eu fui para uma pequena solução alternativa (para baixar 30 + arquivos):

  • Eu criei um arquivo de lote
  • Listou todos os arquivos
  • Colocar firefox.exe no começo de cada linha
  • Fui para o diretório firefox em Program Files
  • Ran.

8





E se PowerShell é uma opção, essa é a rota preferida, já que você (potencialmente) não terá que instalar nada extra:

(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt', 'C:\tmp\file.tx??t')

Caso contrário, o Wget for Windows, como outros apontaram, é definitivamente a segunda melhor opção. Como postado em outra resposta, parece que você pode download Wget sozinho, ou você pode pegá-lo como parte de Cygwin ou MSys.

Se, por algum motivo, você se encontrar preso em um intervalo de tempo, usando uma máquina que não tenha o PowerShell e você tem acesso zero a um navegador da Web em funcionamento (ou seja, o Internet Explorer é o único navegador no sistema e suas configurações estão corrompidas) e seu arquivo está em um site FTP (em oposição ao HTTP):

start->run "FTP", press "OK".

Se a memória funciona desde o Windows 98, posso confirmar que ainda existe no Windows 8 RTM (talvez você precise entrar em appwiz.cpl e adicionar / remover recursos para obtê-lo). Este utilitário pode baixar e carregar arquivos de / para sites FTP na web. Também pode ser usado em scripts para automatizar qualquer operação.

Essa ferramenta que está sendo construída tem sido uma verdadeira economia de vida para mim no passado, especialmente nos dias de ftp.cdrom.com - Eu baixei o Firefox dessa forma uma vez, em uma máquina completamente quebrada que tinha apenas uma conexão discada à Internet. conexão (quando o tamanho máximo do pacote do sneakernet ainda era de 1,44 MB, e o Firefox ainda era chamado de "Netscape" / eu faz trollface).

Algumas dicas: é o seu próprio processador de comandos e tem sua própria sintaxe. Tente digitar "ajuda". Todos os sites FTP exigem um nome de usuário e senha; mas se eles permitem usuários "anônimos", o nome de usuário é "anônimo" e a senha é o seu endereço de e-mail (você pode criar um se não quiser ser rastreado, mas geralmente há algum tipo de lógica para garantir um endereço de email válido).


3



1 por pensar em linha de comando ftp! No entanto wget e powershell foram ambos mencionados bem antes de você se juntar à festa, então -1 lá. : - / - matt wilkie
As outras respostas do powershell que eu vi foram todas multi-liners e / ou tinham algum cheiro de código para elas - este é um pequeno e simples liner para baixar um arquivo. - Também queria fornecer uma resposta que cobrisse todas as bases. :-) - BrainSlugs83
Não tenho certeza porque você tem dois pontos de interrogação no arquivo de destino C:\tmp\file.tx??t - Ploni


Cygwin tem o Wget (e muitos outros utilitários).


3





E http://www.httrack.com/ tem uma boa GUI (e é grátis), para espelhar sites. Também tem uma versão do Linux.


2