
Estou escrevendo um script bash para baixar periodicamente um arquivo de configuração usando cURL. O problema é o seguinte, o arquivo tem em torno de 110 MB e sempre tem o mesmo nome de arquivo.
Posso baixar o arquivo, verificar seu hash (md5, sha1) e compará-lo com um arquivo baixado anteriormente:
- se o hash for igual, o arquivo é o mesmo e não foi atualizado: neste caso baixei sem motivo.
- se o hash for diferente, o arquivo no servidor web é uma nova versão: neste caso, utilizo este arquivo e atualizo para a nova versão.
Gostaria de executar esse script a cada meia hora, e baixar 110 MB de graça (mesma versão do arquivo) me incomoda.Existe uma maneira de baixar os primeiros 500 KB usando curl na linha de comando?
Minha solução atual é comparar o tamanho do arquivo do cabeçalho HTTP, mas ainda gostaria de ter uma resposta para a pergunta acima e saber se isso é viável. Muito obrigado.
curl -sI 'http://domain.tld/uri/updater/getLatest.etcenter?c=var&asi=allright' -H 'Host: domínio.tld' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) como Gecko' -H 'Aceitar: text/html,application/xhtml+xml ,aplicativo/xml;q=0,9,/;q=0,8' -H 'Aceitar idioma: en-US,en;q=0,5' -H 'Aceitar codificação: gzip, deflate, br' -H 'DNT: 1' -H 'Conexão: keep-alive ' | grep 'Comprimento do conteúdo:'
Responder1
Você pode confiar nas datas de modificação do seu arquivo tanto no cliente quanto no servidor? Nesse caso, você pode usar a funcionalidade "GET condicional"/"If-Modified-Since" do HTTP com a opção curl
's -z
. Não há necessidade de baixar nada. Esta é uma funcionalidade integrada do protocolo HTTP que tem sido muito usada em todos os lugares desde o início.
Não há necessidade de baixar nada se a data de modificação do arquivo no servidor não for mais recente que a do arquivo que você baixou da última vez.
Para o seu bash
script, considere usar stat(1)
para encontrar o horário do mod do arquivo local, para que você possa inserir essas informações no arquivo curl -z …
.