现在的位置: 首页 > 综合 > 正文

使用C++、WinINet实现HTTP下载

2013年09月17日 ⁄ 综合 ⁄ 共 797字 ⁄ 字号 评论关闭

最近用wxWidgets在Win平台下做一个项目,涉及到从http服务器上下载文件,用wxHTTP发现其在内网下载一个100多k的文件要10多秒,不敢恭维,转而考虑使用boost中的网络库但考虑到要增加程序exe的大小,就打算用socket来封装一个,无意之中在msdn上瞄到WinINet这个东东,所以就尝试尝试!

使用WinINet实现HTTP下载步骤如下:

1.准备工作。在使用WinINet函数前,要调用 InternetAttemptConnect 函数来检测网络连接的存在否。使用 InternetCheckConnection 函数来ping服务器是否畅通。
2.初始化WinINet。使用 InternetOpen 函数来建立起网络连接环境。该函数并没有连接到网络以校验设置的环境的正确性。该函数会返回一个环境句柄HINTERNET。
3.使用InternetConnect函数在一个网络连接环境中建立会话。一个会话包括了站点信息、连接参数等。对于HTTP协议,该函数并不会管理和建立连接到站点。该函数返回一个会话句柄HINTERNET。
4.使用HttpOpenRequest来开启一个请求、 使用HttpAddRequestHeaders来添加额外的请求属性、使用HttpSendRequest来发送请求,在HttpSendRequest时才会真正建立起连接。对于下载来讲,只有Get请求,所以不讨论具体的请求格式或内容,具体的可参考HTTP的标准
5.递归使用 InternetQueryDataAvailable 函数查询当前已下载的内容的长度,使用 InternetReadFile 函数来读取下载的内容。这里仅用了阻塞下载的方式,WinINet的HTTP也支持异步下载。
6.下载完成,关闭各句柄。

收工!

源码:

http://download.csdn.net/detail/revofu/5003976

抱歉!评论已关闭.