2010-01-07 10 views
7

Estoy programando un software en Python para descargar PDF HTTP desde una base de datos. veces la descarga se detiene con este mensaje:Descargar archivo usando urllib en Python con la función wget -c

retrieval incomplete: got only 3617232 out of 10689634 bytes 

Como 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 implementarlo directamente en mi software de Python.

¿Alguna idea?

Gracias

Respuesta

7

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

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' 

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

Cuestiones relacionadas