Como baixar e retomar arquivos com cURL
Para baixar um arquivo com cURL, informe uma URL e um nome de arquivo de saída com -o. O passo a passo
abaixo salva um arquivo de código-fonte do projeto curl, segue redirecionamentos e mostra como
continuar o download se ele parar no meio do caminho.
Verifique o cURL no terminal
Abra um terminal em um diretório onde você possa salvar arquivos. Estes exemplos usam comandos no estilo Bash e foram testados no macOS com cURL 8.7.1 e 8.22.0. Primeiro, verifique a versão instalada:
curl --version
A primeira linha deve começar com curl seguido de um número de versão. Se o comando não existir, use a
página de download do curl para encontrar uma instalação para a sua plataforma.
Baixe para um arquivo local
Este comando baixa o arquivo de código-fonte do curl 8.22.0 como arquivo de exemplo. Você não precisa compilá-lo nem instalá-lo. O comando sobrescreve um arquivo existente com o mesmo nome, então escolha outro nome de saída se precisar manter esse arquivo.
curl -fsSLo curl-8.22.0.tar.xz 'https://curl.se/download/curl-8.22.0.tar.xz'
As opções curtas estão combinadas em -fsSLo:
| Opção | O que faz |
|---|---|
-f (--fail) | Trata erros HTTP, como 404, como uma transferência com falha. |
-s (--silent) | Oculta o indicador de progresso. |
-S (--show-error) | Mantém as mensagens de erro visíveis ao usar -s. |
-L (--location) | Segue redirecionamentos HTTP. |
-o (--output) | Salva a resposta no nome de arquivo informado logo depois. |
Essas opções estão documentadas no manual do curl.
Sem uma opção de saída, o cURL escreve na saída padrão, que geralmente é o seu terminal.
Com -o, ele escreve em um arquivo
no diretório atual, a menos que você informe outro caminho.
O -L é importante quando um link de download redireciona para outro local: o cURL faz a
requisição ao destino e salva a resposta dele no nome de arquivo que você escolheu. Mantenha essa
opção tanto no download inicial quanto no comando de retomada abaixo.
Em caso de sucesso, este comando não exibe nada e devolve você ao prompt. Verifique o tamanho salvo:
wc -c < curl-8.22.0.tar.xz
Para este arquivo, a contagem é de 2953092 bytes. Isso verifica o tamanho, não o conteúdo; use o
checksum do publicador quando precisar verificar os bytes baixados. Para baixar o seu próprio arquivo,
substitua tanto a URL quanto o nome do arquivo de saída. Mantenha a URL entre aspas para que
caracteres do shell, como &, não dividam o comando.
Reconheça um download com falha
Com -f, uma resposta como HTTP 404 ou 500 faz o cURL encerrar com o código de saída 22 e uma
mensagem de erro, sem salvar a página de erro do servidor como seu download. Sem -f, uma
resposta de erro HTTP pode parecer uma transferência bem-sucedida. Veja o
comportamento de --fail no manual.
Uma falha de rede ainda pode deixar um arquivo parcial no disco. A simples presença de um arquivo não
prova que a transferência terminou. Se a URL retornar uma página de login com HTTP 200, o
-f também não vai detectar isso: o cURL não consegue saber se esses bytes são o arquivo que
você pretendia baixar.
Retome um download interrompido
Se um download parar, mantenha o arquivo parcial. Para testar isso por conta própria, inicie um novo
download com limite de velocidade e pressione Ctrl+C depois de alguns segundos. Isso sobrescreve
de propósito o arquivo que você acabou de baixar. O indicador de progresso aparece aqui porque o
comando omite -s.
curl -fSL --limit-rate 50K -o curl-8.22.0.tar.xz 'https://curl.se/download/curl-8.22.0.tar.xz'
Continue a partir do mesmo diretório, usando o mesmo nome de arquivo de saída e a mesma URL:
curl -fsSL -C - -o curl-8.22.0.tar.xz 'https://curl.se/download/curl-8.22.0.tar.xz'
O - depois de -C diz ao cURL para usar o tamanho do arquivo local como offset de byte
inicial. No caso do HTTP, o servidor precisa atender à requisição de intervalo (range request) para
que o cURL possa anexar os bytes restantes. O
guia do curl sobre retomada de downloads
explica como o offset é escolhido. Depois que o comando for concluído com sucesso, repita a
verificação de tamanho acima.
Se o servidor ignorar a requisição de intervalo, o cURL informa o erro 33 em vez de retomar o
download. Recomece com o comando de download original, sem -C -, para substituir o arquivo
parcial por um download completo.
Só retome um arquivo cujo conteúdo remoto não tenha mudado. O cURL usa o tamanho do seu arquivo parcial; ele não compara os bytes já salvos com a cópia do servidor. Por isso, um arquivo remoto alterado pode produzir uma mistura de conteúdo antigo e novo, mesmo quando a transferência é bem-sucedida. Uma URL de download com versão, como a do arquivo usado aqui, evita depender de uma URL “latest” que muda com o tempo. Se você não souber se o arquivo mudou ou não, comece do zero.
Para fazer upload de arquivos e executar um Template da Transloadit, consulte o guia da API para criar uma Assembly.
