Pergunta

Existe uma maneira fácil e confiável para confirmar que um download web concluída com êxito fazer o download usando Python ou WGET [para arquivos grandes]? Eu quero ter certeza que o arquivo baixado em sua totalidade antes de realizar outra ação.

Foi útil?

Solução

Dada muitos (a maioria na prática, creio eu) HTTP / 1.1 seções de cabeçalho, você pode obter uma expectativa sobre quanto tempo o corpo da entidade é. Se você tem essa expectativa, você pode decidir se você tem todos os dados da entidade. Consulte 2616 secção RFC 4,4 para detalhes completos, mas essencialmente:

  • às vezes o content-length reflete com precisão o comprimento do corpo da entidade
  • , por vezes, não pode haver corpo da entidade, dependendo do código de resposta ou se a resposta está respondendo a um pedido HEAD
  • , por vezes, o pedido é a transferência codificado; e há algum marcador nos dados HTTP que diz 'Eu sou feito agora' (Transfer-Encoding: chunked)
  • e, por vezes, a mensagem é feito oficialmente quando os fecha a conexão (no caso, você não pode diferenciar entre começar a coisa toda e ser cortado cedo)

Em todos os casos, mas o último, você pode dizer se você tem a coisa toda ou não. Eu não sei se qualquer ferramenta em particular (wget ou uma biblioteca python existente) dá-lhe um sinal facilmente interpretável que a sua resposta foi ou não foi truncado.

Outras dicas

HTTP não fornece uma maneira de verificar isso.

A forma usada ao distribuir arquivos grandes é, após o download, calcular o md5sum do arquivo e compará-lo com o md5sum fornecida pelo servidor.

Exemplo, que é como ubuntu faz para distribuir e verificar seus downloads CD. https://help.ubuntu.com/community/HowToMD5SUM

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top