【问题标题】:Resume Ability for a simple Download Manager (C++ - WinInet)恢复简单下载管理器的能力(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 来实现,但不知道发送什么以及如何发送。

【问题讨论】:

    标签: c++ winapi download wininet resume


    【解决方案1】:

    您正在寻找Range 标头。使用HttpAddRequestHeaders() 添加自定义的Range 请求标头,告诉服务器您想要的字节范围。语法见RFC 2616 Section 14.35

    如果服务器支持范围(使用HttpQueryInfo(HTTP_QUERY_ACCEPT_RANGES) 验证),它将发送206 状态码而不是200 状态码(使用HttpQueryInfo(HTTP_QUERY_STATUS_CODE) 验证)。

    如果收到206,只需将现有文件查找到恢复位置,然后按原样将响应数据读取到文件中。

    如果收到200,则文件将从头开始,因此:

    1. 截断现有文件并重新开始编写

    2. 查找文件,读取并丢弃响应数据,直到到达所需位置,然后将剩余数据读入您的文件中。

    将任何其他状态代码视为下载失败。

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 2014-07-06
      相关资源
      最近更新 更多