Como usar curl para baixar arquivos da linha de comando do Linux

Uma janela de terminal em um desktop Linux no estilo Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

O curlcomando Linux pode fazer muito mais do que baixar arquivos. Descubra do que curlé capaz e quando você deve usá-lo em vez de wget.

curl vs. wget: Qual é a diferença?

As pessoas geralmente lutam para identificar os pontos fortes relativos dos comandos wgete curl. Os comandos têm alguma sobreposição funcional. Cada um deles pode recuperar arquivos de locais remotos, mas é aí que termina a semelhança.

wgeté uma ferramenta fantástica para baixar conteúdo e arquivos . Ele pode baixar arquivos, páginas da web e diretórios. Ele contém rotinas inteligentes para percorrer links em páginas da web e baixar recursivamente conteúdo em um site inteiro. É insuperável como gerenciador de download de linha de comando.

curlsatisfaz uma necessidade totalmente diferente . Sim, ele pode recuperar arquivos, mas não pode navegar recursivamente em um site à procura de conteúdo para recuperar. O que curlrealmente faz é permitir que você interaja com sistemas remotos, fazendo solicitações a esses sistemas e recuperando e exibindo suas respostas para você. Essas respostas podem ser arquivos e conteúdo de página da web, mas também podem conter dados fornecidos por meio de um serviço da web ou API como resultado da “pergunta” feita pela solicitação curl.

E curlnão se limita a sites. curlsuporta mais de 20 protocolos, incluindo HTTP, HTTPS, SCP, SFTP e FTP. E, sem dúvida, devido ao seu manuseio superior de canais Linux, curlpode ser mais facilmente integrado com outros comandos e scripts.

O autor de curltem uma página da web que descreve as diferenças que ele vê entre curle wget.

Instalando curl

Dos computadores usados ​​para pesquisar este artigo, o Fedora 31 e o Manjaro 18.1.0 já curl estavam instalados. curlteve que ser instalado no Ubuntu 18.04 LTS. No Ubuntu, execute este comando para instalá-lo:

sudo apt-get install curl

sudo apt-get install curl em uma janela de terminal

A versão curl

A --versionopção faz  curlreportar sua versão. Ele também lista todos os protocolos compatíveis.

curl - versão

curl - versão em uma janela de terminal

Recuperando uma página da web

Se apontarmos curlpara uma página da web, ela a recuperará para nós.

curl https://www.bbc.com

curl https://www.bbc.com em uma janela de terminal

Mas sua ação padrão é despejá-lo na janela do terminal como código-fonte.

Recomendado:  Como ativar o Adobe Flash no Google Chrome 76+

Saída do curl exibindo o código-fonte da página da web em uma janela de terminal

Cuidado : se você não disser curlque deseja algo armazenado como um arquivo, ele sempre irá descarregá-lo na janela do terminal. Se o arquivo que está recuperando for um arquivo binário, o resultado pode ser imprevisível. O shell pode tentar interpretar alguns dos valores de byte no arquivo binário como caracteres de controle ou sequências de escape.

Salvando dados em um arquivo

Vamos dizer ao curl para redirecionar a saída para um arquivo:

curl https://www.bbc.com> bbc.html

curl https://www.bbc.com> bbc.html em uma janela de terminal

Desta vez, não vemos a informação recuperada, ela é enviada diretamente para o arquivo para nós. Como não há saída de janela de terminal para exibir, curlgera um conjunto de informações de progresso.

Isso não aconteceu no exemplo anterior porque as informações de progresso estariam espalhadas por todo o código-fonte da página da web, portanto, curlsuprimidas automaticamente.

Neste exemplo,  curldetecta que a saída está sendo redirecionada para um arquivo e que é seguro gerar as informações de andamento.

curl medidor de progresso de download em uma janela de terminal

As informações fornecidas são:

  • % Total : O valor total a ser recuperado.
  • % Recebido : a porcentagem e os valores reais dos dados recuperados até o momento.
  • % Xferd : A porcentagem e o envio real, se os dados estiverem sendo carregados.
  • Average Speed ​​Dload : A velocidade média de download.
  • Velocidade média de upload: a velocidade média de upload.
  • Tempo total : a duração total estimada da transferência.
  • Tempo gasto : o tempo decorrido até o momento para esta transferência.
  • Tempo restante : o tempo estimado restante para a conclusão da transferência
  • Velocidade Atual : A velocidade de transferência atual para esta transferência.

Como redirecionamos a saída curl para um arquivo, agora temos um arquivo chamado “bbc.html”.

arquivo bbc.html criado por curl.

Clicar duas vezes nesse arquivo abrirá seu navegador padrão para exibir a página da web recuperada.

Página da web recuperada exibida em uma janela do navegador.

Observe que o endereço na barra de endereços do navegador é um arquivo local neste computador, não um site remoto.

Não precisamos redirecionar a saída para criar um arquivo. Podemos criar um arquivo usando a -oopção (saída) e dizendo curlpara criar o arquivo. Aqui, estamos usando a -oopção e fornecendo o nome do arquivo que desejamos criar “bbc.html”.

curl -o bbc.html https://www.bbc.com

curl -o bbc.html https://www.bbc.com em uma janela de terminal

Usando uma barra de progresso para monitorar downloads

Para que as informações de download baseadas em texto sejam substituídas por uma barra de progresso simples, use a opção -#(barra de progresso).

curl -x -o bbc.html https://www.bbc.com

curl -x -o bbc.html https://www.bbc.com em uma janela de terminal

Reiniciando um download interrompido

É fácil reiniciar um download que foi encerrado ou interrompido. Vamos começar o download de um arquivo considerável. Usaremos a versão mais recente do Suporte de longo prazo do Ubuntu 18.04. Estamos usando a --outputopção de especificar o nome do arquivo em que desejamos salvá-lo: “ubuntu180403.iso.”

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso em uma janela de terminal

O download começa e segue seu caminho até a conclusão.

Recomendado:  Como atualizar manualmente seu dispositivo Nexus com ADB Sideload

Progresso de um grande download em um terminal widnow

Se interrompermos forçosamente o download com Ctrl+C, voltaremos ao prompt de comando e o download será abandonado.

Para reiniciar o download, use a opção -C(continue em). Isso faz curlcom que o download seja reiniciado em um ponto ou deslocamento especificado no arquivo de destino. Se você usar um hífen -como deslocamento, curlo examinará a parte já baixada do arquivo e determinará o deslocamento correto a ser usado.

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso em uma janela de terminal

O download é reiniciado. curlrelata o deslocamento em que está reiniciando.

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso em uma janela de terminal

Recuperando cabeçalhos HTTP

Com a -Iopção (head), você pode recuperar apenas os cabeçalhos HTTP. Isso é o mesmo que enviar o comando HTTP HEAD para um servidor web.

curl -I www.twitter.com

curl -I www.twitter.com em uma janela de terminal

Este comando recupera apenas informações; ele não baixa nenhuma página da web ou arquivo.

Saída de curl -I www.twitter.com em uma janela de terminal

Download de vários URLs

Usando xargs, podemos baixar vários URLs de uma vez. Talvez queiramos baixar uma série de páginas da web que constituem um único artigo ou tutorial.

Copie esses URLs para um editor e salve-os em um arquivo chamado “urls-to-download.txt”. Podemos usar xargspara tratar o conteúdo de cada linha do arquivo de texto como um parâmetro para o qual alimentará curl, por sua vez.

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5

Este é o comando que precisamos usar para xargspassar esses URLs curlum de cada vez:

xargs -n 1 curl -O <urls-to-download.txt

Observe que este comando usa o -Ocomando de saída (arquivo remoto), que usa um “O” maiúsculo. Esta opção faz curlcom que o arquivo recuperado seja salvo com o mesmo nome do arquivo no servidor remoto.

A -n 1opção diz xargspara tratar cada linha do arquivo de texto como um único parâmetro.

Ao executar o comando, você verá vários downloads começarem e terminarem, um após o outro.

Saída de xargs e curl baixando vários arquivos

Verificar no navegador de arquivos mostra que vários arquivos foram baixados. Cada um tem o nome que tinha no servidor remoto.

arquivo baixado no navegador de arquivos Nautilus

Baixando arquivos de um servidor FTP

Usar curlcom um servidor FTP ( File Transfer Protocol ) é fácil, mesmo se você precisar autenticar com um nome de usuário e senha. Para passar um nome de usuário e senha curluse a -uopção (usuário) e digite o nome de usuário, dois pontos “:” e a senha. Não coloque um espaço antes ou depois do cólon.

Recomendado:  Como criar uma conta de convidado no Windows 10

Este é um servidor FTP gratuito para teste hospedado pela Rebex . O site FTP de teste tem um nome de usuário predefinido de “demo” e a senha é “senha”. Não use este tipo de nome de usuário e senha fracos em um servidor de produção ou FTP “real”.

curl -u demo: senha ftp://test.rebex.net

curl -u demo: senha ftp://test.rebex.net em uma janela de terminal

curl descobre que o estamos apontando para um servidor FTP e retorna uma lista dos arquivos que estão presentes no servidor.

Lista de arquivos em um servidor FTP remoto em uma janela de terminal

O único arquivo neste servidor é um arquivo “readme.txt”, de 403 bytes de comprimento. Vamos recuperá-lo. Use o mesmo comando de um momento atrás, com o nome do arquivo anexado a ele:

curl -u demo: senha ftp://test.rebex.net/readme.txt

curl -u demo: senha ftp://test.rebex.net/readme.txt em uma janela de terminal

O arquivo é recuperado e curlexibe seu conteúdo na janela do terminal.

O conteúdo de um arquivo recuperado de um servidor FTP exibido em uma janela de terminal

Em quase todos os casos, será mais conveniente ter o arquivo recuperado salvo em disco para nós, em vez de exibido na janela do terminal. Mais uma vez podemos usar o -Ocomando de saída (arquivo remoto) para que o arquivo seja salvo no disco, com o mesmo nome de arquivo que possui no servidor remoto.

curl -O -u demo: senha ftp://test.rebex.net/readme.txt

curl -O -u demo: senha ftp://test.rebex.net/readme.txt em uma janela de terminal

O arquivo é recuperado e salvo no disco. Podemos usar lspara verificar os detalhes do arquivo. Ele tem o mesmo nome do arquivo no servidor FTP e o mesmo comprimento, 403 bytes.

ls -hl readme.txt

ls -hl readme.txt em uma janela de terminal

Envio de parâmetros para servidores remotos

Alguns servidores remotos aceitarão parâmetros em solicitações enviadas a eles. Os parâmetros podem ser usados ​​para formatar os dados retornados, por exemplo, ou podem ser usados ​​para selecionar os dados exatos que o usuário deseja recuperar. Freqüentemente, é possível interagir com interfaces de programação de aplicativos  (APIs) da web usando curl.

Como um exemplo simples, o   site ipify tem uma API que pode ser consultada para verificar seu endereço IP externo.

curl https://api.ipify.org

Adicionando o format parâmetro ao comando, com o valor “json” podemos novamente solicitar nosso endereço IP externo, mas desta vez os dados retornados serão codificados no  formato JSON .

curl https://api.ipify.org?format=json

curl https://api.ipify.org em uma janela de terminal

Aqui está outro exemplo que faz uso de uma API do Google. Ele retorna um objeto JSON que descreve um livro. O parâmetro que você deve fornecer é o número International Standard Book Number (ISBN) de um livro. Você pode encontrá-los na contracapa da maioria dos livros, geralmente abaixo de um código de barras. O parâmetro que usaremos aqui é “0131103628”.

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628 em uma janela de terminal

Os dados retornados são abrangentes:

Dados da API de livros do Google exibidos em uma janela de terminal

Às vezes curl, Às vezes wget

Se eu quisesse baixar conteúdo de um site e ter a estrutura em árvore do site pesquisada recursivamente por esse conteúdo, eu usaria wget.

Se eu quisesse interagir com um servidor remoto ou API e possivelmente baixar alguns arquivos ou páginas da web, eu usaria curl. Especialmente se o protocolo for um dos muitos não suportados pelo wget.