Pregunta

Estoy programando un software en Python HTTP para descargar PDF a partir de una base de datos. A veces, la descarga se detiene con este mensaje:

retrieval incomplete: got only 3617232 out of 10689634 bytes

¿Cómo puedo pedir a la descarga para reiniciar donde se detiene mediante la función de 206 Partial Content HTTP?

Puedo hacerlo usando wget -c y funciona bastante bien, pero me gustaría aplicar directamente en el software de Python.

¿Alguna idea?

Gracias

¿Fue útil?

Solución

Puede solicitar una descarga parcial mediante el envío de un GET con la cabecera Range:

import urllib2
req = urllib2.Request('http://www.python.org/')
#
# Here we request that bytes 18000--19000 be downloaded.
# The range is inclusive, and starts at 0.
#
req.headers['Range'] = 'bytes=%s-%s' % (18000, 19000)
f = urllib2.urlopen(req)
# This shows you the *actual* bytes that have been downloaded.
range=f.headers.get('Content-Range')
print(range)
# bytes 18000-18030/18031
print(repr(f.read()))
# '  </div>\n</body>\n</html>\n\n\n\n\n\n\n'

Tenga cuidado de comprobar la Content-Range para aprender lo que realmente bytes se han descargado, ya que su rango puede estar fuera de límites, y / o no todos los servidores parecen respetar la cabecera Range.

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