恢复中止下载?

Vis*_*ell 2 c++ windows winapi http wininet

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

我在Windows,C++上编码,如果我可以使用WinAPI实现这一点会很好.

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

小智 13

HTTP恢复有点用词不当,因为连接通常在下载"暂停"时终止,然后当它恢复时,会发出新的请求.

然后,新请求包含范围规范,因此服务器仅发送整个请求文件的一部分.

通常,您将首先触发HEAD请求以获取整个文件大小.

请求

HEAD /big_file.zip HTTP/1.1
Host: www.example.com
Run Code Online (Sandbox Code Playgroud)

响应

HTTP/1.0 200 OK
Accept-Ranges: bytes
Content-Length: 2000000
Content-Type: application/zip
Run Code Online (Sandbox Code Playgroud)

然后你可以发送这样的请求,只下载从1,000,000到2,000,000的字节(如果你的第一次下载停止在1,000,000字节):

请求

GET /big_file.zip HTTP/1.1
Host: example.com
Range: bytes=1000000,2000000
Run Code Online (Sandbox Code Playgroud)

响应

HTTP/1.0 206 Partial Content
Accept-Ranges: bytes
Content-Length: 1000000
Content-Range: bytes 1000000-2000000/2000000
Content-Type: image/jpeg

...
Run Code Online (Sandbox Code Playgroud)

那将是一般原则.您可以使用cUrl,boost::asioWindows套接字在C++中实现它......有许多不同的方法和许多好的教程.