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

Conteúdo

Uma janela de terminal em um desktop Linux estilo Ubuntu.

El Linux curl O comando pode fazer muito mais do que baixar arquivos. Descobrir o que curl ele é capaz de, e quando você deve usá-lo em vez de wget.

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

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

wget é um ferramenta fantástica para baixar conteúdo e arquivos. Você pode baixar arquivos, páginas da web e diretórios. Contém rotinas inteligentes para percorrer links em páginas da web e baixar conteúdo recursivamente em todo um portal da web. É incomparável como gerenciador de download de linha de comando.

curl satisfazer uma necessidade completamente diferente. sim, pode recuperar arquivos, mas você não pode navegar recursivamente em um portal da web à procura de conteúdo para recuperar. Este curl o que realmente faz é permitir que você interaja com sistemas remotos, fazendo solicitações a esses sistemas e recuperando e exibindo suas respostas. Essas respostas podem ser arquivos e conteúdo do site, mas eles também podem conter dados fornecidos através de um serviço web ou API como resultado do “pergunta” feito pelo aplicativo curl.

E curl não limitado a sites. curl suporta mais do que 20 protocolos, incluindo HTTP, HTTPS, SCP, SFTP y FTP. E possivelmente, devido ao seu manuseio superior de tubos Linux, curl pode ser mais facilmente integrado com outros comandos e scripts.

O autor de curl tem um site que descreva as diferenças que você vê Entre curl e wget.

Instalação do Curl

Dos computadores usados ​​para pesquisar esta postagem, Fedora 31 e Manjaro 18.1.0 tinham curl já instalado. curl teve que ser instalado no Ubuntu 18.04 LTS. No Ubuntu, execute este comando para instalá-lo:

sudo apt-get install curl

A versão curl

a --version opção faz curlrelatar sua versão. Ele também lista todos os protocolos que suporta.

curl - versão

Recuperar uma página da web

Se nós mirarmos curl Em um site, vai pegar de volta para nós.

https curl://www.bbc.com

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

Ter cuidado: Se você não diz curl quer algo armazenado como um arquivo, o fará para sempre jogue-o na janela do terminal. Se o arquivo que você 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.

Salvar dados em arquivo

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

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

Desta vez, não vemos as informações recuperadas, enviado diretamente para o arquivo por nós. Porque não há saída de janela de terminal para exibir, curl gera um conjunto de informações de progresso.

Você não fez isso no exemplo acima porque as informações de progresso estariam espalhadas por todo o código-fonte da página da web, pelo que curl excluiu automaticamente.

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

As informações fornecidas são:

  • % Total: O valor total a ser recuperado.
  • % Ele recebeu: A porcentagem e os valores reais dos dados recuperados até agora.
  • % Xferd: A porcentagem e o frete real, se os dados estão carregando.
  • Download de velocidade média: Velocidade média de download.
  • Carga de velocidade média: Velocidade média de upload.
  • Tempo total: A duração total estimada da transferência.
  • Tempo usado: O tempo decorrido até agora 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.

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

Ao clicar duas vezes naquele arquivo, seu navegador padrão será aberto para exibir a página da web recuperada.

A página da web recuperada é exibida em uma janela do navegador.

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

Nós não temos que redirecionar a saída para criar um arquivo. Podemos criar um arquivo usando o -o (Saída) opção, e dizendo curl para criar o arquivo. Aqui estamos usando o -o e fornecendo o nome do arquivo que desejamos criar “bbc.html”.

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

Usando uma barra de progresso para monitorar os downloads

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

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

Reiniciando um download interrompido

É fácil reiniciar um download que foi concluído ou interrompido. Vamos começar a baixar um arquivo considerável. Usaremos a última versão de suporte de longo prazo do Ubuntu 18.04. Estamos usando o --output opção para especificar o nome do arquivo no qual desejamos salvá-lo: “ubuntu180403.iso”.

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

O download começa e avança até a conclusão.

Progresso de um grande download em um terminal widnow

Se interrompermos a descarga à força com Ctrl+C , voltamos ao prompt de comando e o download é abandonado.

Para reiniciar o download, usar el -C (continue) opção. Isso faz com que curl para reiniciar o download em um ponto especificado ou compensar dentro do arquivo de destino. Se você usar um traço - como deslocamento, curl irá olhar para a parte já baixada do arquivo e determinar o deslocamento correto para usar para si mesmo.

curl -C - --saída ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

O download é reiniciado. curl relata o deslocamento em que está reinicializando.

Recuperando cabeçalhos HTTP

Com ele -I (cabeça), só pode recuperar cabeçalhos HTTP. Isso é o mesmo que enviar o Comando HTTP HEAD para um servidor web.

curl -I www.twitter.com

Este comando apenas recupera informações; não baixa páginas da web ou arquivos.

Baixar de vários URLs

Usando xargs podemos baixar vários URLs agora mesmo. Talvez queiramos baixar uma série de páginas da Web que compõem um único post ou tutorial.

copiar essas urls em um editor e salvá-las em um arquivo chamado “urls-para-download.txt”. Podemos usar xargs para tratar o conteúdo de cada linha do arquivo de texto como um parâmetro que irá alimentar curl, Sucessivamente.

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 devemos usar para ter xargs passar essas URLs para curl um ao mesmo tempo:

xargs -n 1 cacho -O < urls-para-download.txt

Observe que este comando usa o -O (arquivo remoto) comando de saída, que usa um “O” letra maiúscula. Esta opção causa curl para salvar o arquivo recuperado com o mesmo nome do arquivo no servidor remoto.

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

Quando você executa o comando, você verá vários downloads começando e terminando, um após o outro.

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

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

arquivo baixado sem navegador de arquivos Nautilus

RELACIONADO: Como usar o comando xargs no Linux

Baixando arquivos de um servidor FTP

Usando curl com um Protocolo de Transferência de Arquivos (FTP) é facil, mesmo se você tiver que se autenticar com um nome de usuário e senha. Para passar um nome de usuário e senha com curl use o -u (Nome do usuário) e escreva o nome de usuário, dois pontos ":"e a senha. Não coloque um espaço antes ou depois do cólon.

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

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

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

o único arquivo neste servidor é um arquivo “me ler.txt”, a partir de 403 bytes de comprimento. Vamos pegar de volta. Use o mesmo comando de agora, com nome de arquivo anexado:

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

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

Em quase todos os casos, será mais conveniente salvar o arquivo recuperado no disco, em vez de exibi-lo na janela do terminal. Mais uma vez, podemos usar o -O (arquivo remoto) comando de saída para salvar o arquivo no disco, com o mesmo nome de arquivo que você tem no servidor remoto.

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

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

ls -hl readme.txt

RELACIONADO: Como usar o comando FTP no Linux

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, como um exemplo, ou podem ser usados ​​para escolher os dados exatos que o usuário deseja recuperar. Muitas vezes é viável interagir com a web. interfaces de programação de aplicativos (API) usando curl.

Como um exemplo simples, a ipify O portal web possui uma API que pode ser consultada para estabelecer seu endereço IP externo.

https curl://api.ipify.org

Adicionando o format parâmetro para comando, com o valor de “json” podemos reordenar nosso endereço IP externo, mas desta vez os dados retornados serão codificados no Formato JSON.

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

Aqui está outro exemplo que usa uma API do Google. Retorna um objeto JSON que descreve um livro. O parâmetro que você precisa fornecer é o Número de livro padrão internacional (ISBN) número de um livro. Você pode encontrá-los na contracapa da maioria dos livros, geralmente sob um código de barras. O parâmetro que usaremos aqui é “0131103628”.

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

Os dados retornados estão completos:

Às vezes curl, um veces wget

Se você quiser baixar conteúdo de um portal da web e fazer com que a estrutura da árvore do portal pesquise recursivamente por esse conteúdo, usaria wget.

Se você quiser interagir com um servidor remoto ou API, e possivelmente baixar alguns arquivos ou páginas da web, usaria curl. Especialmente se o protocolo fosse um dos muitos não suportados por wget.

setTimeout(função(){
!função(f,b,e,v,n,t,s)
{E se(f.fbq)Retorna;n = f.fbq = função(){n.callMethod?
n.callMethod.apply(n,argumentos):n.queue.push(argumentos)};
E se(!f._fbq)f._fbq = n;n.push = n;n.loaded =!0;n.version = ’2.0′;
n.queue =[];t = b.createElement(e);t.async =!0;
t.src = v;s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, documento,'roteiro',
‘Https://connect.facebook.net/en_US/fbevents.js ’);
fbq('iniciar', ‘335401813750447’);
fbq('acompanhar', ‘PageView’);
},3000);

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.