恢复简单下载管理器的能力(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)的主要内容,如果未能解决你的问题,请参考以下文章

Python--开发简单爬虫

我的Realtek高清晰音频管理器的平衡器和环境音效不见了,怎么恢复啊?

C++ winhttp 实现文件下载器

C++ 中map 中迭代器的简单使用:

Excel VBA教务考试成绩管理——考场编排系统下载及使用说明

liunx screen使用简单实验