سؤال

أنا برمجة برنامج في بيثون لتنزيل HTTP PDF من قاعدة بيانات. في بعض الأحيان توقف التنزيل مع هذه الرسالة:

retrieval incomplete: got only 3617232 out of 10689634 bytes

كيف يمكنني أن أسأل التنزيل لإعادة تشغيل المكان الذي يتوقف فيه باستخدام 206 Partial Content ميزة HTTP؟

يمكنني أن أفعل ذلك باستخدام wget -c ويعمل بشكل جيد للغاية، لكني أرغب في تطبيقه مباشرة في برامج بيثون الخاصة بي.

اي فكرة ؟

شكرًا لك

هل كانت مفيدة؟

المحلول

يمكنك طلب تنزيل جزئي عن طريق إرسال الحصول على مع 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'

كن حذرا للتحقق من Content-Range لمعرفة ما تم تحميل البايتات بالفعل، لأن النطاق الخاص بك قد يكون خارج الحدود، و / أو لا يبدو أن جميع الخوادم تحترم Range رأس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top