Domanda

C'è un modo semplice e affidabile per confermare che un download dal Web completato con successo per scaricare utilizzando Python o WGET [per file di grandi dimensioni]? Voglio per assicurarsi che il file scaricato nella sua interezza prima di eseguire un'altra azione.

È stato utile?

Soluzione

Dato molti (la maggior parte, in pratica, credo) HTTP / 1.1 sezioni intestazione, è possibile ottenere un'aspettativa di quanto tempo il corpo è un'entità. Se si dispone di questa aspettativa, si può decidere se hai tutti i dati di entità. Vedere RFC 2616 paragrafo 4.4 per tutti i dettagli, ma in sostanza:

  • volte il content-length riflette con precisione la lunghezza del corpo di entità
  • a volte ci può essere corpo dell'entità, a seconda del codice di risposta o se la risposta risponde ad una richiesta HEAD
  • volte la richiesta viene codificata trasferimento; e c'è qualche marcatore nei dati HTTP che dice 'Ho chiuso la società' (Transfer-Encoding: chunked)
  • e, a volte, il messaggio è ufficialmente fatto quando si chiude di connessione (in questo caso, non è possibile distinguere tra ricevendo il tutto e di essere tagliati fuori presto)

In tutti i casi, ma l'ultimo, si può dire se hai la cosa oppure no. Non so se qualsiasi strumento in particolare (wget o una libreria Python esistente) ti dà un segnale facilmente interpretabili che la risposta è stata o non è stato troncato.

Altri suggerimenti

HTTP non fornisce un modo per verificare questo.

Il modo utilizzato durante la distribuzione di file di grandi dimensioni è, dopo il download, calcolare la checksum MD5 del file e confrontarlo con il md5sum fornita dal server.

Esempio, è così che ubuntu fa per distribuire e controllare i loro download CD. https://help.ubuntu.com/community/HowToMD5SUM

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top