我很少有在慢速 Internet 连接网络上运行的 PC + 他们使用 VPN,因此连接变得非常慢。我有自己的应用程序,必须通过 HTTP 从外部服务器下载更新,但如果更新大约为几 MB,则不会下载。所以我要问的是如何实现下载方法,以便在连接中止时可以恢复下载。
我在 Windows、C++ 上编写代码,如果我可以使用 WinAPI 实现这一点,那就太好了。
我认为internet explorer 有这个功能,所以必须用WININET 来实现。
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
……有许多不同的方法和许多好的教程。