2

低速のインターネット接続ネットワークで実行されているPCはほとんどありません。VPNを使用しているため、接続が非常に遅くなります。HTTP経由で外部サーバーから更新をダウンロードする必要がある独自のアプリがありますが、更新が数MB程度の場合、ダウンロードされません。だから私が求めているのは、接続が中止された場合にダウンロードを再開できるように、ダウンロード方法を実装する方法です。

私はWindows、C ++でコーディングしていますが、WinAPIを使用してこれを実現できればよいでしょう。

Internet Explorerにはこの機能があると思うので、WININETで実装する必要があります。

4

1 に答える 1

14

HTTP再開は、ダウンロードが「一時停止」されたときに接続が終了し、再開されたときに新しい要求が行われるため、多少誤称です。

新しいリクエストには範囲指定が含まれるため、サーバーはリクエストされたファイル全体の一部のみを送信します。

通常、最初にHEADリクエストを実行して、ファイルサイズ全体を取得します。

リクエスト

HEAD /big_file.zip HTTP/1.1
Host: www.example.com

応答

HTTP/1.0 200 OK
Accept-Ranges: bytes
Content-Length: 2000000
Content-Type: application/zip

次に、このようなリクエストを送信して、1,000,000〜2,000,000バイトのみをダウンロードできます(最初のダウンロードが1,000,000バイトで停止した場合)。

リクエスト

GET /big_file.zip HTTP/1.1
Host: example.com
Range: bytes=1000000,2000000

応答

HTTP/1.0 206 Partial Content
Accept-Ranges: bytes
Content-Length: 1000000
Content-Range: bytes 1000000-2000000/2000000
Content-Type: image/jpeg

...

それが一般的な原則です。cUrl 、、boost::asioWindowsソケットを使用してC++で実装できます...さまざまな方法と多くの優れたチュートリアルがあります。

于 2012-05-06T12:29:27.137 に答える