سؤال

هل هناك طريقة سهلة وموثوقة للتأكد من اكتمال تنزيل ويب بنجاح للتنزيل باستخدام Python أو WGET [للحصول على ملفات كبيرة]؟ أريد أن أتأكد من تنزيل الملف في مجمله قبل إجراء إجراء آخر.

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

المحلول

بالنظر إلى العديد من (أكثر في الممارسة العملية، أعتقد) أقسام رأس HTTP / 1.1، يمكنك الحصول على توقعات حول مدى طول جسم الكيان. إذا كان لديك هذا التوقع، فيمكنك أن تقرر ما إذا كان لديك كل بيانات الكيان. يرى RFC 2616 القسم 4.4 للحصول على التفاصيل الكاملة، ولكن أساسا:

  • في بعض الأحيان content-length يعكس بدقة طول جسم الكيان
  • في بعض الأحيان لا يمكن أن يكون هناك هيئة كيكة، اعتمادا على رمز الاستجابة أو إذا كان الاستجابة يستجيب ل HEAD طلب
  • في بعض الأحيان يكون الطلب يتم ترميزه؛ وهناك بعض العلامات في بيانات HTTP التي تقول "انتهيت الآن" (Transfer-Encoding: chunked)
  • وأحيانا، يتم إجراء الرسالة رسميا عند إغلاق الاتصال (في هذه الحالة، لا يمكنك التمييز بين الحصول على كل شيء ويتم قطعه مبكرا)

في جميع الحالات ولكن آخر واحد، يمكنك معرفة ما إذا كان لديك كل شيء أم لا. لا أعرف ما إذا كانت أي أداة على وجه الخصوص (WGET أو Library Python موجودة) تمنحك إشارة تفسير بسهولة مفادها أن ردك كانت أو لم يتم اقتطاعها.

نصائح أخرى

HTTP لا يقدم وسيلة للتحقق من ذلك.

الطريقة المستخدمة عند توزيع الملفات الكبيرة هي، بعد التنزيل، احسب MD5SUM من الملف ومقارنتها باستخدام MD5SUM المقدم من الخادم.

على سبيل المثال، هذه هي الطريقة التي يقوم بها Ubuntu بتوزيعها وتحقق من تنزيلات الأقراص المضغوطة. https://help.ubuntu.com/Community/howtomd5sum.

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