恢复中止下载?

时间:2012-05-06 11:45:26

标签: c++ windows winapi http wininet

我很少有PC在慢速Internet连接网络上运行+他们使用VPN,因此连接变得非常慢。 我有自己的应用程序必须通过HTTP从外部服务器下载更新,但如果更新大约几MB,则无法下载。 所以我要问的是如何实现下载方法,以便在连接中止时我可以恢复下载。

我在Windows,C ++上编码,如果我能用WinAPI实现这一点会很好。

我认为Internet Explorer具有此功能,因此必须使用WININET实现。

1 个答案:

答案 0 :(得分: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::asio,Windows套接字,在C ++中实现它...有许多不同的方法和许多好的教程。