恢复简单下载管理器的能力(C++ - WinInet)
Posted
技术标签:
【中文标题】恢复简单下载管理器的能力(C++ - WinInet)【英文标题】:Resume Ability for a simple Download Manager (C++ - WinInet) 【发布时间】:2014-09-23 04:00:41 【问题描述】:我正在编写一个非常简单的下载管理器,它可以Download
- Pause
- Resume
,
怎么可能resume
从之前停止的文件的确切点下载,实际上我唯一要寻找的是如何在服务器端设置文件指针,然后我可以从确切的位置下载它InternetReadFile (Any Other Functions are accepted if you know a better way for it)
我想要的一点。
虽然,InternetSetFilePointer Never works for me
:) 我不想使用 BITS。
我认为这可以通过发送 header 来实现,但不知道发送什么以及如何发送。
【问题讨论】:
【参考方案1】:您正在寻找Range
标头。使用HttpAddRequestHeaders()
添加自定义的Range
请求标头,告诉服务器您想要的字节范围。语法见RFC 2616 Section 14.35。
如果服务器支持范围(使用HttpQueryInfo(HTTP_QUERY_ACCEPT_RANGES)
验证),它将发送206
状态码而不是200
状态码(使用HttpQueryInfo(HTTP_QUERY_STATUS_CODE)
验证)。
如果收到206
,只需将现有文件查找到恢复位置,然后按原样将响应数据读取到文件中。
如果收到200
,则文件将从头开始,因此:
截断现有文件并重新开始编写
查找文件,读取并丢弃响应数据,直到到达所需位置,然后将剩余数据读入您的文件中。
将任何其他状态代码视为下载失败。
【讨论】:
以上是关于恢复简单下载管理器的能力(C++ - WinInet)的主要内容,如果未能解决你的问题,请参考以下文章
我的Realtek高清晰音频管理器的平衡器和环境音效不见了,怎么恢复啊?