Como Descarregar Ficheiros com curl
O curl e uma das ferramentas de linha de comandos mais versateis para descarregar ficheiros atraves de HTTP, HTTPS, FTP e dezenas de outros protocolos. Quer precise de guardar uma resposta de API num ficheiro ou automatizar downloads em massa num script shell, o curl tem uma opcao para isso. Este guia cobre todas as opcoes relacionadas com downloads — desde guardar ficheiros basicos com -o e -O ate retomar transferencias interrompidas com -C -, limitar a largura de banda com --limit-rate e mostrar barras de progresso. Cada opcao inclui uma explicacao clara, padroes de utilizacao comuns e um exemplo pronto a copiar.
Referencia Rapida das Opcoes de Download
Escrever a saida num ficheiro com nome especificado em vez do stdout
Escrever a saida num ficheiro com o nome do ficheiro remoto
Seguir automaticamente redirecionamentos HTTP 3xx
Continuar/retomar uma transferencia de ficheiro anterior
Limitar a velocidade de transferencia a uma taxa especificada
Recusar descarregar ficheiros maiores do que o tamanho especificado
Usar o cabecalho Content-Disposition para nomear o ficheiro
Exibir o progresso da transferencia como uma barra de progresso simples
Fornecer utilizador:palavra-passe para autenticacao no servidor
Tentar novamente a transferencia em erros transitorios (numero de vezes)
Aguardar este numero de segundos entre tentativas
Enviar um ficheiro local para um URL (PUT por defeito)
Criar diretorios locais conforme necessario ao guardar a saida
Suprimir o medidor de progresso e mensagens de erro
Guardar ficheiro(s) de saida no diretorio especificado (curl 7.73+)
curl -o: Guardar com um Nome de Ficheiro Especifico
- O que faz
- A opcao
-o(ou--output) indica ao curl para guardar o corpo da resposta num ficheiro que voce especifica. Sem ela, o curl imprime a resposta no stdout (o seu terminal). Pode usar qualquer nome de ficheiro e caminho — o curl criara o ficheiro ou substituira um existente. - Utilizacao comum
- Use
-oquando precisar de controlar o nome exato do ficheiro ou guardar num diretorio especifico. Funciona com qualquer protocolo — HTTP, HTTPS, FTP, SFTP e outros. Combine com-Lpara lidar com redirecionamentos e-spara operacao silenciosa em scripts.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Guardar com o Nome de Ficheiro Remoto
- O que faz
- A opcao
-O(ou--remote-name) guarda o ficheiro descarregado usando o nome extraido do URL. Por exemplo, se o URL terminar com/data.csv, o curl cria um ficheiro chamadodata.csvno diretorio atual. - Utilizacao comum
- Use
-Oquando o nome do ficheiro remoto for significativo e nao precisar de o renomear. Pode passar multiplas opcoes-Opara descarregar varios ficheiros num so comando. Nota: se o URL nao contiver um nome de ficheiro (p. ex., terminar com/), o curl falhara — use-oem alternativa.
$ curl -O https://example.com/files/data.csvcurl -L: Seguir Redirecionamentos
- O que faz
- A opcao
-L(ou--location) faz com que o curl siga automaticamente redirecionamentos HTTP — 301 (Moved Permanently), 302 (Found), 307 e 308. Sem-L, o curl devolve a propria resposta de redirecionamento em vez do conteudo real. - Utilizacao comum
- A maioria dos URLs de download redireciona pelo menos uma vez (p. ex., de HTTP para HTTPS, ou de um URL curto para o ficheiro real). Combine sempre
-Lcom-oou-Oao descarregar ficheiros. Por defeito, o curl segue ate 50 redirecionamentos; altere isto com--max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Retomar Downloads Interrompidos
- O que faz
- A opcao
-C -(ou--continue-at -) indica ao curl para detetar automaticamente o tamanho do ficheiro parcial existente e retomar o download a partir do ponto onde parou. O servidor deve suportar o cabecalho HTTPRangepara que isto funcione. - Utilizacao comum
- Se um download grande foi interrompido por um problema de rede ou timeout, basta re-executar o mesmo comando com
-C -adicionado. O curl enviara um cabecalhoRange: bytes=OFFSET-e descarregara apenas os dados restantes. Isto e essencial para ficheiros grandes em ligacoes instáveis.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: Limitar a Velocidade de Download
- O que faz
- A opcao
--limit-ratelimita a velocidade de download (e upload) a taxa especificada. Aceita sufixos:kouKpara kilobytes/s,mouMpara megabytes/s,gouGpara gigabytes/s. - Utilizacao comum
- Use
--limit-ratepara evitar saturar a sua largura de banda ao descarregar ficheiros grandes, especialmente em ligacoes partilhadas. Tambem e util para testar como a sua aplicacao lida com respostas lentas.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Abortar se o Ficheiro For Demasiado Grande
- O que faz
- A opcao
--max-filesizeindica ao curl para abortar a transferencia se o tamanho esperado do ficheiro (do cabecalhoContent-Length) exceder o limite especificado. O tamanho pode usar sufixos comok,M,G. - Utilizacao comum
- Use em scripts para evitar que downloads inesperadamente grandes consumam espaco em disco. Note que nem todos os servidores enviam
Content-Length— nesse caso, o curl nao pode impor este limite e o download prossegue normalmente.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Usar o Nome de Ficheiro Sugerido pelo Servidor
- O que faz
- A opcao
-J(ou--remote-header-name) indica ao curl para usar o nome de ficheiro especificado no cabecalhoContent-Dispositiondo servidor em vez de o derivar do URL. Isto e comum em APIs de download que devolvem ficheiros com nomes significativos. - Utilizacao comum
- Combine sempre
-Jcom-O. Isto e util quando o URL e um endpoint de API (como/export?format=csv) mas o servidor devolve um nome de ficheiro adequado nos cabecalhos. Nota de seguranca: o servidor controla o nome do ficheiro, portanto use apenas com servidores de confianca.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: Mostrar uma Barra de Progresso
- O que faz
- A opcao
-#(ou--progress-bar) substitui o medidor de progresso verboso predefinido por uma barra de progresso simples###. E mais facil de ler para uso interativo. - Utilizacao comum
- Use
-#quando estiver a descarregar interativamente e quiser um indicador de progresso limpo. Para scripts, prefira-s(silencioso) ou o medidor de progresso predefinido. A saida predefinida do curl ja mostra velocidade, percentagem, tempo restante e tamanho total.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzOpcoes de Download Adicionais
Fornecer utilizador:palavra-passe para autenticacao no servidor
Tentar novamente a transferencia em erros transitorios (numero de vezes)
Aguardar este numero de segundos entre tentativas
Enviar um ficheiro local para um URL (PUT por defeito)
Criar diretorios locais conforme necessario ao guardar a saida
Suprimir o medidor de progresso e mensagens de erro
Guardar ficheiro(s) de saida no diretorio especificado (curl 7.73+)
Cenarios Reais de Download
Estes exemplos combinam multiplas opcoes para lidar com tarefas comuns de download que encontrara no desenvolvimento e scripting do dia a dia.
Descarregar Multiplos Ficheiros de Uma Vez
Use multiplas opcoes -O para descarregar varios ficheiros num so comando. O curl processa-os sequencialmente. Para downloads paralelos, use xargs ou GNU parallel.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtDescarregar de um Servidor FTP
O curl suporta FTP, FTPS e SFTP nativamente. Adicione -u user:password para acesso autenticado. Use -O para manter o nome de ficheiro remoto.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlDescarregar com Autenticacao
Use -u user:pass para Basic Auth, ou -H para passar um Bearer token ou chave de API. Combine com -L e -o para um download completo.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportDownload Fiavel com Retoma e Novas Tentativas
Combine -C - (retomar), --retry (nova tentativa automatica em caso de falha) e -L (seguir redirecionamentos) para downloads robustos que sobrevivem a interrupcoes de rede.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipPerguntas Frequentes sobre Download com curl
Qual e a diferenca entre curl -o e curl -O?
-o filename guarda o download com o nome de ficheiro exato que especificar. -O extrai o nome do ficheiro do URL e usa-o. Use -o quando quiser um nome ou caminho personalizado; use -O quando o nome do ficheiro remoto for adequado.
Porque e que o curl descarrega um ficheiro vazio ou HTML em vez do ficheiro real?
O URL provavelmente devolve um redirecionamento HTTP (301 ou 302). Por defeito, o curl guarda a propria resposta de redirecionamento — nao o conteudo final. Adicione -L para seguir redirecionamentos automaticamente: curl -L -o file URL.
Como retomo um ficheiro parcialmente descarregado com curl?
Use curl -C - -o filename URL. A opcao -C - deteta o tamanho do ficheiro existente e envia um cabecalho Range para solicitar apenas os bytes restantes. O servidor deve suportar pedidos de intervalo para que isto funcione.
Como limito a velocidade de download no curl?
Use --limit-rate com um valor e sufixo: curl --limit-rate 500k -o file URL limita a velocidade a 500 KB/s. Sufixos: k (KB/s), M (MB/s), G (GB/s).
O curl pode descarregar multiplos ficheiros de uma vez?
Sim. Use multiplas opcoes -O: curl -O URL1 -O URL2 -O URL3. O curl descarrega-os sequencialmente. Para downloads paralelos, encaminhe uma lista de URLs para xargs -P 4 -I {} curl -O {}.
Como descarrego um ficheiro que requer autenticacao?
Para HTTP Basic Auth: curl -u user:pass -o file URL. Para Bearer tokens: curl -H "Authorization: Bearer TOKEN" -o file URL. Para chaves de API nos cabecalhos: curl -H "X-API-Key: KEY" -o file URL.
Como descarrego ficheiros de um servidor FTP com curl?
Use curl -u user:pass -o localfile ftp://host/path/file. O curl suporta FTP, FTPS (FTP sobre TLS) e SFTP (SSH FTP) nativamente. Para FTP anonimo, omita -u.
Como descarrego ficheiros grandes de forma fiavel com curl?
Combine -C - (retomar em caso de falha), --retry 5 (nova tentativa automatica), --retry-delay 10 e -L (seguir redirecionamentos): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Isto lida automaticamente com interrupcoes de rede.
Como mostro uma barra de progresso ao descarregar com curl?
Use curl -# -o file URL para uma barra de progresso simples. A saida predefinida do curl ja mostra velocidade de transferencia, percentagem e tempo estimado. Para scripts, use -s para suprimir toda a saida.
Posso especificar um diretorio de download no curl?
Com curl 7.73+, use --output-dir /path/to/dir combinado com -O. Para versoes mais antigas, especifique o caminho completo com -o /path/to/dir/filename. Adicione --create-dirs se o diretorio ainda nao existir.
Devo usar curl ou wget para descarregar ficheiros?
Ambos sao excelentes. O wget e mais simples para espelhamento recursivo de websites e tem logica de nova tentativa integrada. O curl suporta mais de 25 protocolos (nao apenas HTTP/FTP), e melhor para chamadas de API e scripting, suporta mais metodos de autenticacao e esta disponivel em praticamente todos os sistemas operativos.
Como uso o curl num script bash para descarregar ficheiros?
Use curl -fsSL -o file URL: -f falha silenciosamente em erros HTTP (sem pagina de erro guardada), -s silencioso, -S mostra erros mesmo no modo silencioso, -L segue redirecionamentos. Verifique o codigo de saida: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.