1

[大きなファイルの場合] Python または WGET を使用して、Web ダウンロードが正常に完了したことを確認する簡単で信頼できる方法はありますか? 別のアクションを実行する前に、ファイルが完全にダウンロードされていることを確認したいと考えています。

4

2 に答える 2

3

HTTP/1.1 ヘッダー セクションが多数 (実際にはほとんどの場合だと思います) ある場合、エンティティ本体の長さを予測できます。その期待がある場合は、すべてのエンティティ データを取得したかどうかを判断できます。詳細については、 RFC 2616 セクション 4.4を参照してください。

  • content-lengthエンティティ本体の長さを正確に反映する場合があります
  • 応答コードによっては、または応答がHEAD要求に応答している場合は、エンティティ本体がない場合があります。
  • リクエストが転送エンコードされている場合があります。そして、HTTP データには、「これで完了です」というマーカーがいくつかあります ( Transfer-Encoding: chunked)
  • また、接続が閉じられたときにメッセージが正式に終了することもあります (この場合、すべてを取得することと早期に切断されることを区別できません)。

最後のケースを除くすべてのケースで、すべてを取得したかどうかを判断できます。特定のツール (wget または既存の python ライブラリ) が、応答が切り捨てられたかどうかを簡単に解釈できるシグナルを提供するかどうかはわかりません。

于 2009-12-02T17:06:03.403 に答える
1

HTTPはそれをチェックする方法を提供しません。

大きなファイルを配布するときに使用される方法は、ダウンロード後に、ファイルのmd5sumを計算し、サーバーによって提供されるmd5sumと比較することです。

たとえば、これがubuntuがCDのダウンロードを配布および確認する方法です。https://help.ubuntu.com/community/HowToMD5SUM

于 2009-12-02T16:43:32.357 に答える