2010-01-07 10 views
7

Bir veritabanından HTTP PDF dosyasını indirmek için Python'da bir yazılım programlıyorum. Bazen indirme Bu mesajla durdurmak:Wyt -c özelliği ile Python'da urllib kullanarak dosya indirin

retrieval incomplete: got only 3617232 out of 10689634 bytes 

Nasıl bu 206 Partial Content HTTP özelliğini kullanarak durur nerede yeniden indirmek isteyebilir ?

wget -c kullanarak yapabilirim ve oldukça iyi çalışıyor, ancak doğrudan Python yazılımımda uygulamak istiyorum.

Herhangi bir fikrin var mı?

teşekkür ederiz

cevap

7

Sen Range başlığıyla bir GET göndererek kısmi indirmek isteyebilirsiniz: Aralığınızla beri,

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' 

bayt aslında indirilmiş öğrenmek için Content-Range kontrol için dikkatli olun sınırlar dışında olabilir ve/veya tüm sunucular Range başlığına uymuyor gibi görünebilir.