网上很难找到比较好的使用WinINet实现HTTP下载的代码,经过半天的研究MSDN(可以搜索关键字:MSDN HTTP sessions,链接:http://msdn.microsoft.com/en-us/library/aa384322(v=vs.85).aspx),还有在google的code搜索中找了一些例子(比如:这里),终于自己实现了一个简单的下载函数,记录到这里备忘。
函数特点:通过先发送一次HEAD请求,获得要下载资源的Header,可以对待下载的资源的类型和大小进行限制。另外,请求失败时自动尝试重新发送几次请求。
TODO: 如果要实现断点续传,可以在发送请求时,使用HttpAddRequestHeaders()添加Range头域,请求服务器文件的某个部分。(参见HTTP协议)
HTTP协议Range头域介绍:
Range头域
Range头域可以请求实体的一个或者多个子范围。例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。
//code by MulinB, 2011-07-27
#includ