A checagem direta é curl -sI https://example.com/big.iso | grep -i 'accept-ranges': sem Accept-Ranges: bytes na resposta, o servidor simplesmente não consegue retomar nada, e -C - não vai salvar você. Pule essa checagem e você pode esbarrar no pior modo de falha do curl: ele termina com código 0, não imprime nada alarmante, e deixa um arquivo silenciosamente truncado. Isto mostra como retomar direito, pegar essa falha, tentar de novo e confirmar que o resultado está realmente completo.
1. O servidor sequer consegue retomar downloads?
$ clai verifica se o servidor suporta retomar downloads→ curl -sI https://example.com/big.iso | grep -i 'accept-ranges'
Sem o cabeçalho Accept-Ranges: bytes na resposta, retomar é impossível em princípio, e -C - não muda isso. Trinta segundos de checagem economizam uma hora de dor quando um download grande cai perto do fim.
2. Retomando um download normal
$ clai retoma este download interrompido→ curl -C - -O https://example.com/big.iso
-C - diz ao curl para calcular o deslocamento sozinho a partir do tamanho do arquivo local. -O salva com o nome vindo da URL. Se o arquivo já está completo, curl só avisa que não há nada a buscar.
3. A armadilha: o servidor não suporta Range
$ clai baixa o arquivo e verifica se ele chegou completo→ curl -C - -o part.bin http://example.com/big.bin && cmp -s part.bin original.bin && echo intact || echo TRUNCATED
É por essa linha que o artigo inteiro existe. Quando um servidor ignora Range, o curl mesmo assim termina com código 0 — sem erro, sem aviso — e o arquivo fica cortado exatamente onde parou. Testado contra um servidor real: chegaram 51200 bytes em vez de 200000, sem uma única mensagem de erro em lugar nenhum. Nunca confie num download retomado sem checar — pelo tamanho, por cmp, ou pelo checksum.
4. Tentando de novo até terminar
$ clai baixa este arquivo com tentativas repetidas até baixar tudo→ curl --retry 10 --retry-delay 5 --retry-all-errors -C - -O https://example.com/big.iso
--retry cobre falhas de rede, --retry-all-errors estende isso também às respostas 5xx. Junto com -C -, cada tentativa continua de onde a anterior parou, em vez de começar do zero.
5. Limitando a velocidade para não saturar o link
$ clai baixa o arquivo mas limita a um megabyte por segundo→ curl --limit-rate 1M -C - -O https://example.com/big.iso
Útil numa máquina onde outra coisa também precisa da banda. Aceita sufixos k, M e G.
6. Conferindo se baixou o arquivo certo
$ clai verifica o checksum do arquivo que você acabou de baixar→ curl -sO https://example.com/big.iso.sha256 && sha256sum -c big.iso.sha256
O último passo de qualquer download retomado. Um checksum batendo é a única prova real de que um arquivo remontado a partir de pedaços está íntegro — o tamanho pode bater sem o conteúdo bater.
Pegadinhas
- curl nunca avisa que uma retomada falhou. Código de saída 0, arquivo truncado. Checar depois é a única defesa real.
- Se o arquivo mudou no servidor no meio da retomada, você fica com lixo. Bytes da versão antiga e da nova acabam colados num único arquivo. Na dúvida, apague o arquivo parcial e baixe de novo.
-C -junto com um-oapontando para um arquivo antigo é perigoso. curl retoma o que já estiver naquele caminho — ele só olha o nome do arquivo, não de onde vieram os bytes.
Perguntas relacionadas
wget ou curl? wget -c tem a mesma lógica de retomada e é mais simples para um arquivo só. curl é mais flexível em scripts e aparece em máquinas onde o wget nunca foi instalado.
Como retomo um download via ssh? rsync --partial --progress --append-verify — ele retoma e verifica a parte que você já tem.
O que significa "bad download resume"? O curl não conseguiu continuar do deslocamento certo — o servidor não suporta Range, ou o arquivo mudou por baixo. Comece do zero.
Veja também
- Medir a latência de uma API com curl
- Verificar se uma porta está aberta em um servidor remoto
- Extrair qualquer arquivo compactado
Pare de adivinhar quais flags do curl um download retomado precisa — descreva e o CliAI escreve o comando. Instale em uma linha.