Pregunta

¿Hay una manera fácil y fiable para confirmar que una descarga web para descargar completado con éxito utilizando Python o WGET [para archivos de gran tamaño]? Quiero para asegurarse de que el archivo descargado en su totalidad antes de realizar otra acción.

¿Fue útil?

Solución

Dado que muchos (la mayoría en la práctica, creo) HTTP / 1.1 secciones de encabezado, se puede obtener una expectativa sobre el tiempo que el cuerpo de la entidad es. Si usted tiene esa expectativa, se puede decidir si tienes todos los datos de la entidad. Ver RFC 2616 sección 4.4 para los detalles completos, pero esencialmente:

  • a veces el content-length refleja con precisión la longitud del cuerpo de la entidad
  • a veces no puede haber un cuerpo de la entidad, en función del código de respuesta o si la respuesta está respondiendo a una petición HEAD
  • a veces la petición se codifica de transferencia; y hay algo de marcador en los datos HTTP que dice 'he terminado ahora' (Transfer-Encoding: chunked)
  • y, a veces, el mensaje es de forma oficial cuando se cierra la conexión (en cuyo caso, no se puede diferenciar entre conseguir todo el asunto y se cortan antes de tiempo)

En todos los casos, pero la última, se puede saber si usted tiene todo el asunto o no. No sé si alguna herramienta en particular (wget o una biblioteca de Python existente) le da una señal fácilmente interpretables que su respuesta fue o no fue truncado.

Otros consejos

HTTP no proporciona una manera de comprobar eso.

La forma utilizada cuando la distribución de archivos de gran tamaño es, después de la descarga, el cálculo de la suma md5 del archivo y compararla con la suma md5 proporcionada por el servidor.

Ejemplo, que es como ubuntu hace para distribuir y comprobar sus descargas de CD. https://help.ubuntu.com/community/HowToMD5SUM

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top