2

我很少有在慢速 Internet 连接网络上运行的 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、Windows 套接字在 C++ 中实现它boost::asio……有许多不同的方法和许多好的教程。

于 2012-05-06T12:29:27.137 回答