恢复中止的下载

Resume aborted download?

本文关键字:下载 恢复      更新时间:2023-10-16

我很少有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
...

这将是一般原则。C++您可以使用cUrl,boost::asio,Windows套接字,...有许多不同的方法和许多好的教程。