1:使用winhttp下载

#include <afx.h>
#include <afxinet.h>
#define RECVPACK_SIZE 2048
bool DownloadSaveFiles(char* url,char *strSaveFile) {//下载文件并保存为新文件名bool ret=false;CInternetSession Sess("lpload");Sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT     , 2000); //2秒的连接超时Sess.SetOption(INTERNET_OPTION_SEND_TIMEOUT        , 2000); //2秒的发送超时Sess.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT     , 2000); //2秒的接收超时Sess.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT   , 2000); //2秒的发送超时Sess.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 2000); //2秒的接收超时DWORD dwFlag = INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD ;CHttpFile* cFile   = NULL;char      *pBuf    = NULL;int        nBufLen = 0   ;do {try{cFile = (CHttpFile*)Sess.OpenURL(url,1,dwFlag);DWORD dwStatusCode;cFile->QueryInfoStatusCode(dwStatusCode);if (dwStatusCode == HTTP_STATUS_OK) {//查询文件长度DWORD nLen=0;cFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, nLen);//CString strFilename = GetFileName(url,TRUE);nBufLen=nLen;if (nLen <= 0) break;////分配接收数据缓存pBuf = (char*)malloc(nLen+8);ZeroMemory(pBuf,nLen+8);char *p=pBuf;while (nLen>0) {//每次下载8Kint n = cFile->Read(p,(nLen<RECVPACK_SIZE)?nLen:RECVPACK_SIZE);//接收完成退出循环if (n <= 0) break;////接收缓存后移p+= n ;//剩余长度递减nLen -= n ;}//如果未接收完中断退出if (nLen != 0) break;//接收成功保存到文件CFile file(strSaveFile, CFile::modeCreate | CFile::modeWrite);file.Write(pBuf,nBufLen);file.Close();ret = true;}} catch(...) {break;//}} while(0);//释放缓存if (pBuf) {free(pBuf);pBuf=NULL;nBufLen = 0 ;}//关闭下载连接if (cFile) {cFile->Close();Sess.Close();delete cFile;}return ret;
}
int main() {DownloadSaveFiles("http://www.nirsoft.net/utils/nircmd.zip","d:\\cppdld_nircmd.zip");return 0;
}

2:

void download(const char *Url, const char *filename)byte Temp[1024];ULONG Number = 1;FILE *stream;HINTERNET hSession = InternetOpen("RookIE/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);if (hSession != NULL){HINTERNET handle2 = InternetOpenUrl(hSession, Url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);if (handle2 != NULL){if ((stream = fopen(filename, "wb")) != NULL){while (Number > 0){InternetReadFile(handle2, Temp, MAXBLOCKSIZE - 1, &Number);fwrite(Temp, sizeof(char), Number, stream);}fclose(stream);}InternetCloseHandle(handle2);handle2 = NULL;}InternetCloseHandle(hSession);hSession = NULL;}
}

3:

#include <UrlMon.h>//download file   URLDownloadToFile
#pragma comment(lib, "urlmon.lib")
URLDownloadToFile(NULL, url, filename, 0, NULL);//download with the second way

参考:

1:https://www.cnblogs.com/tiandsp/p/7440837.html

2:https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms775123(v=vs.85)

http文件下载c/c++ 多种方法相关推荐

  1. 多种方法解决计算机程序中出现.DLL文件丢失的问题

    title: DLL-lose date: 2019-11-21 15:55:47 description: 解决计算机程序中出现.DLL文件丢失的问题   在安装某些软件,我们正准备开开心心地打开, ...

  2. 【bugku CTF】MISC杂项:很普通的数独(isccctf)、啊哒、隐写、隐写2、多种方法解决、easy_crypto 、聪明的小羊、ping

    目录 1.很普通的数独 2.啊哒 3.隐写 4.隐写2​ 5.多种方法解决 6.easy_crypto 7.聪明的小羊​ 8.ping​ 1.很普通的数独 这里下载下来的是一个zip文件,解压缩,里面 ...

  3. PHP 中提示undefined index如何解决(多种方法)

    PHP 中提示undefined index如何解决(多种方法) 参考文章: (1)PHP 中提示undefined index如何解决(多种方法) (2)https://www.cnblogs.co ...

  4. c# asp.net core取当月第一天和最后一天及删除最后一个字符的多种方法

    当月第一天0时0分0秒 DateTime.Now.AddDays(1 - DateTime.Now.Day).Date 当月最后一天23时59分59秒 DateTime.Now.AddDays(1 - ...

  5. python怎么读文件内容-Python读取文件内容为字符串的方法(多种方法详解)

    以下笔记是我在 xue.cn 学习群之数据分析小组所整理分享的心得.相关背景是:我选择中文词频统计案例作为考察大家python基础功掌握程度. 以小见大,下面是2个小技能的具体实战: 如何灵活地处理文 ...

  6. 多种方法教你破解电信共享上网的限制

    现在很多家庭都有不止一台电脑,多台电脑要实现共享上网,以前大家一般都是通过路由器来实现多台电脑共享上网,但是随着宽带用户的增加,各地的电信开始纷纷封杀家庭用户的多机共享上网,让不少消费者伤透了头脑,难 ...

  7. ML之模型文件:机器学习、深度学习中常见的模型文件(.h5、.keras)简介、h5模型文件下载集锦、使用方法之详细攻略

    ML之模型文件:机器学习.深度学习中常见的模型文件(.h5..keras)简介.h5模型文件下载集锦.使用方法之详细攻略 目录 ML/DL中常见的模型文件(.h5..keras)简介及其使用方法 一. ...

  8. 接口里面的方法都是抽象方法吗_单元格区域选取,竟然有这么多种方法,你都造吗?...

    在日常工作中, 怎么能少了Excel表格,相信我,如果你能把Excel用到极致,工作效率可是瞬间提升的,当然,可能还附带升职加薪哟! 关于单元格及单元格区域的选取可以说是Excel中最基本的操作之一, ...

  9. 多种方法巧妙优化数据库

    多种方法巧妙优化数据库 日期:2011/12/24 16:18:01  来源:本站 点击率:330 我要评论(0)字号:T T T        1.没有索引或者没有用到索引(这是查询慢最常见的问题, ...

  10. html下拉框变长,改变HTML下拉框SELECT选项的多种方法

    原标题:改变HTML下拉框SELECT选项的多种方法 提交表单后返回的HTML页面重新渲染,SELECT控件的value和selectedIndex属性都无法使下拉框保留提交表单前的状态. 复制代码 ...

最新文章

  1. 斯坦福大学陈丹琦等人解读机器阅读最新进展:超越局部模式匹配
  2. Oracle查询会话连接数
  3. 一种Android闪屏页实现方法(偏门别类)
  4. OpenCV使用Shi-Tomasi方法检测拐角的实例(附完整代码)
  5. php 图像编程库,PHP图像处理开发库
  6. log4j.properties配置
  7. 【转载】TCP拥塞控制算法 优缺点 适用环境 性能分析
  8. 暑期集训 Day2 简单博弈论
  9. 你必须知道的Nginx常用基本命令
  10. springboot项目license_license · 开源的SpringBoot前后端分离项目/framework - Gitee.com
  11. ElementUI:nav收起后点击后出现黑色边框
  12. 基于socketio 写一个聊天室
  13. MySQL全文索引:中文语义分词检索
  14. 山东省大学生软件设计大赛
  15. 实名认证失败_身份证在国政通进行实名认证失败怎么办?
  16. 33. Prometheus-报警-通知模板参考
  17. intellij 取消svn 用户名 密码
  18. zotero+better bibtex+overleaf(latex):如何批量导出参考文献及相关设置
  19. 插入top.php,CmsTop手动区块(就是phpcms的碎片)的内容支持三种添加方式
  20. POE供电怎么用?常见PoE供电4种工程应用方法

热门文章

  1. [HTML+CSS+Vue.js] 超长文本等内容默认折叠显示,点击展开全文,再点击收起(仿知乎效果)
  2. realtek是什么意思_Realtek高清晰音频管理器 全解析
  3. 网易企业邮箱的网易文档是什么?
  4. TAOCP_2.3.1_遍历二叉树
  5. 电子科技大学软件工程大一到大二课程
  6. 城市大脑总体框架和主要平台
  7. tbschedule源码学习
  8. JAVA:实现HillCipher希尔密码算法(附完整源码)
  9. mysql的简单用法_mysql简单用法,以及增删改查语句
  10. (转)IDEA2017破解码(亲测可用)