使用wininet实现网络资源的下载
来源:互联网 发布:apache 进程池 编辑:程序博客网 时间:2024/06/01 10:37
BOOL CHttpOperation::httpDownLoadFile(){wchar_t wuserAgent[BUF_SIZE] = { 0 };CharToWchar(m_userAgent.c_str(), wuserAgent);m_hOpenNet = InternetOpen(wuserAgent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);if (m_hOpenNet == NULL){return FALSE;}wcscpy(wuserAgent, _T("http://192.168.1.80:8012/test.txt"));m_hOpenUrlNet = InternetOpenUrl(m_hOpenNet, wuserAgent, NULL, 0, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_PRAGMA_NOCACHE, 0);if (m_hOpenUrlNet == NULL){return FALSE;}//检查状态码DWORD dwStatusCode;DWORD dwStatusSize = sizeof(dwStatusCode);HttpQueryInfo(m_hOpenUrlNet, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwStatusCode, &dwStatusSize, NULL);if (dwStatusCode != 200){InternetCloseHandle(m_hOpenUrlNet);InternetCloseHandle(m_hOpenNet);return FALSE;}//获取接收数据大小DWORD m_iSize;DWORD dwLengthSize = sizeof(m_iSize);HttpQueryInfo(m_hOpenUrlNet, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &m_iSize, &dwLengthSize, NULL);if (m_iSize < 0){InternetCloseHandle(m_hOpenUrlNet);InternetCloseHandle(m_hOpenNet);return FALSE;}//创建本地的文件memset(wuserAgent,0,BUF_SIZE);wcscpy(wuserAgent, _T("d:\\test.txt"));HANDLE createFile = CreateFile(wuserAgent, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);if (createFile == NULL || createFile == INVALID_HANDLE_VALUE){InternetCloseHandle(m_hOpenUrlNet);InternetCloseHandle(m_hOpenNet);return FALSE;}//读取文件char buffer[BUF_SIZE] = {0};DWORD byteRead = 0;BOOL hwrite;DWORD written;int a = 0;if (m_hOpenUrlNet != NULL){while (true){InternetReadFile(m_hOpenUrlNet, buffer, sizeof(buffer), &byteRead);if (byteRead == 0)//读取完毕break;hwrite = WriteFile(createFile, buffer, byteRead, &written, NULL);if (hwrite == 0)//写入失败break;}}//下载完毕关闭连接InternetCloseHandle(m_hOpenUrlNet);InternetCloseHandle(m_hOpenNet);return TRUE;}
wininet是Windows Internet的一套网络编程接口,这个接口中包含了Internet处理的3个协议:HTTP、FTP、gopher(这个协议已经很少使用了)。这套接口,减少了我们的工作量,只要简单的了解HTTP和FTP的协议,就可以轻松的编写代码,实现相关的功能;并不需要我们使用socket(其实是wininet帮助我们完成了socket的相关操作)。这里我们主要讲解怎样通过HTTP协议实现网络资源的下载:
可以有两种方式实现:1、直接调用Windows的API函数:urldownloadtofile,将指定的某个网络URL中的资源,下载到本地
调用这个函数时,需要注意:档URL中存在中文时,需要首先将gb2312转码之后,可以使用
2、调用wininet动态库中的函数,实现文件的下载。操作的流程如下:
1)、使用Internetopen函数,完成wininet.dll的初始化工作;
2)、使用InternetopenUR函数,访问给定的URL中,指定的某个资源;
3)、使用InternetQueryInfo函数,检测访问的状态,以及得到该文件的长度;
4)、使用CreateFile函数。创建一个本地文件,存放下载的网络文件;
5)、使用Internetreadfile函数,下载网络资源;并通过writefile函数将下载的资源写入本地文件;
6)、使用InternetCloseHandle函数,关闭相关的网络连接。
代码展示如上:
阅读全文
0 0
- 使用wininet实现网络资源的下载
- 使用WinINet实现HTTP下载
- 使用WinINet实现HTTP下载
- 使用C++、WinINet实现HTTP下载
- 使用WinINet实现HTTP下载者
- 使用wininet的InternetReadFile下载文件
- 使用wininet的InternetReadFile下载文件
- [Android]网络资源下载时断点续传的实现
- [Android]网络资源下载时断点续传的实现
- [Android]网络资源下载时断点续传的实现
- [Android]网络资源下载时断点续传的实现
- [Android]网络资源下载时断点续传的实现
- 网络资源的下载安装
- 简单的网络资源下载
- 利用WinInet和多线程实现实时显示的下载进度条
- Delphi 使用WinInet 进行下载
- PB使用WININET的FTP方式自动更新(四、下载)
- 使用MFC的WinInet下载网页图片存于本地
- Android组件通信
- Java set 基本使用方法
- Angular4学习笔记(九)- 生命周期钩子简介
- MVC、MVP及MVVM
- ArcGIS 10.2 AE开发几个配置问题
- 使用wininet实现网络资源的下载
- 网站favicon图标查看、制作及使用方法总结
- 双网络(内外网)同步漂移的Active-Active双活模式
- txt读取多项式进行加减乘除还有求值~
- SpringMVC_1
- C++使用变量作为数组长度
- I2C工作原理
- 幻方矩阵
- 过滤器-禁止未授权的IP访问站点