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