使用wininetAPI下载internet文件的源码

基于wininet下的HTTP访问之代理服务器 源代码 基于wininet技术集合c++写的源代码,可以实现用代理服务器来访问URL页面,不是vc++,所以页面显示只是HTML的源代码。zhaquanmin@163.com 立即下载

//#include <windows.h>
#include <afxinet.h>
#include <stdio.h>
#include <WinInet.h>

#pragma comment(lib,"Wininet")
int GetInternetFile(char *szFileUrl,char *szFileName);

int InternetGetFile(char *szFileUrl,char *szFileName);

int main(int argc,char **argv)
{

 DWORD dwTimeBegin = GetTickCount();
 InternetGetFile(argv[1],argv[2]);
// GetInternetFile(argv[1],argv[2]);
 printf("use time %u ms/n",GetTickCount()-dwTimeBegin);
 return 0;
}

int GetInternetFile(char *szFileUrl,char *szFileName)
{
 CInternetSession mySessin("test");
 mySessin.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,30);
 CHttpFile *pHttpFile=NULL;
 char szData[10*1024];
 pHttpFile = (CHttpFile *)mySessin.OpenURL(szFileUrl);

 DWORD dwBytesToRead=0;
 DWORD dwBytesLeft=0;
 DWORD dwBytesRead = 0;
 DWORD dwBufLen=sizeof(DWORD);
 if( !(pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,
  &dwBytesToRead,&dwBufLen)) )
 {
  printf("query length failed:%d/n",GetLastError());
  pHttpFile->Close();
  mySessin.Close();
  return -1;
 }
 printf("the internetfile length=%u bytes/n",dwBytesToRead);

 FILE *fp=NULL;
 fp = fopen(szFileName,"w");
 if(!fp)
 {
  printf("create file %s failed/n",szFileName);
  pHttpFile->Close();
  mySessin.Close();
  return -1;
 }

 dwBytesLeft = dwBytesToRead;
 while( dwBytesLeft!=0 ){
  dwBytesRead = pHttpFile->Read(szData,dwBytesLeft);
  if( dwBytesRead==0 )
   break;
  else
  {
   fwrite(szData,1,dwBytesRead,fp);
  }
  dwBytesLeft = dwBytesToRead - dwBytesRead;
 }
 fclose(fp);
 pHttpFile->Close();
 mySessin.Close();

 printf("download file success/n");
 return 0;
}

int InternetGetFile(char *szFileUrl,char *szFileName)
{
/*
 //获取Internet连接状态
 DWORD dwFlags=0;
 if( !InternetGetConnectedState(&dwFlags,0) )
 {
  printf("InternetGetConnectedState() failed:%d/n",GetLastError());
  return -1;
 }

 char strAgent[64]={0};
 sprintf(strAgent,"Agent%ld",GetTickCount());

 //打开Internet连接
 HINTERNET hOpen=NULL;
 if( !(dwFlags & INTERNET_CONNECTION_PROXY))
 {
  hOpen = InternetOpen(strAgent,INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,
   NULL,NULL,0);
 }
 else
 {
  hOpen = InternetOpen(strAgent,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
 }
*/

 HINTERNET hOpen=NULL;
 hOpen = InternetOpen("myAgent",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
 if(!hOpen)
 {
  printf("Internet connect error:%d/n",GetLastError());
  return -1;
 }

 DWORD dwTimeOut = 1;
 if( !InternetSetOption(hOpen,INTERNET_OPTION_CONNECT_TIMEOUT,&dwTimeOut,sizeof(dwTimeOut)) )
 {
  printf("set timeout failed:%d/n",GetLastError());
  InternetCloseHandle(hOpen);
  return -1;
 }
/*
 DWORD dwValue=0;
 DWORD dwBufLen=sizeof(dwValue);
 if(!InternetQueryOption(hOpen,INTERNET_OPTION_CONNECT_TIMEOUT,&dwValue,&dwBufLen))
 {
  printf("InternetQueryOption failed:%d/n",GetLastError());
  InternetCloseHandle(hOpen);
  return -1;
 }
 printf("query option result, dwValue = %u,dwBufLen=%u/n",dwValue,dwBufLen);


*/
 char szHead[] = "Accept:*/*/r/n/r/n";
 char  szTemp[1024];
 HINTERNET hConnect=NULL;

 //打开Internet文件的URL
 if( !( hConnect = InternetOpenUrl(hOpen,szFileUrl,NULL,0,
  INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_NO_AUTH|INTERNET_FLAG_NO_COOKIES
  ,0) ) )
 {
  printf("Invalid url/n");
  InternetCloseHandle(hOpen);
  return -1;
 }

 FILE *fp=NULL;
 fp = fopen(szFileName,"w");
 if(!fp)
 {
  printf("create file %s failed/n",szFileName);
  InternetCloseHandle(hOpen);
  return -1;
 }

 DWORD dwBytesToRead =0;
 DWORD dwSizeOfRq = sizeof(dwBytesToRead);
 DWORD dwIndex=0;

 //查询Internet文件的长度信息
 if( !( HttpQueryInfo(hConnect,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,
  (LPVOID)&dwBytesToRead,&dwSizeOfRq,&dwIndex) ) )
 {
  printf("HttpQueryInfo failed:%d/n",GetLastError());
  dwBytesToRead = 0;
  fclose(fp);
  InternetCloseHandle(hOpen);
  return -1;
 }
 printf("Avaliable data:%u bytes/n",dwBytesToRead);
 
 DWORD dwReadBytes=0;
 do
 {
  //读取文件数据
  if( !InternetReadFile(hConnect,szTemp,1024,&dwReadBytes) )
  {
   printf("read file error:%d/n",GetLastError());
   fclose(fp);
   InternetCloseHandle(hOpen);
   return -1;
  }

  //下载完毕
  if(dwReadBytes==0)
   break;
  else
   fwrite(szTemp,dwReadBytes,1,fp);
  
  if( (dwBytesToRead -= dwReadBytes)==0 ) break;

 }while( TRUE);
 
 fclose(fp);
 InternetCloseHandle(hOpen);
 printf("download file success/n");
 return 0;
 
} 

利用wininet下载文件的源代码 利用wininet通过http或者ftp协议下载网络上的文件。已经封装好了,非常好用,带进度、速度功能~~ 立即下载

相关推荐

WinInet简单封装示例程序

WinInet简单封装示例程序,支持HTTP头、Cookie、附加数据设置发送成功后可以查询返回Cookie、内容、消息头数据。部分函数如下: void ClearHeaders(); void AddHeader(const char* lpszName, const char* lpszValue); void ClearCookies(); void AddCookie(const char* lpszName, const char* lpszValue); void ClearPostArgs(); void AddPostArg(const char* lpszName, const char* lpszValue); BOOL Request(LPCTSTR lpszURL, HttpType type=TYPE_GET); BOOL GetResponseHeader(CString &strHeader); BOOL GetResponseContent(CString &strContent); BOOL GetResponseCookie(CString &strCookie);

wininet编程,下载者程序,包括获取文件大小

看了一下wininet编程,底层实现其实封装了socket套接字,连接到服务器端口80,填充TCP数据部分作为HTTP协议的报头,然后SEND出去,等待recv的数据。          直接上代码吧            // 文件下载 CONSOLE.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #includ

qq287597590的专栏 1526

MMORPG网络游戏开发之任务系统的架构与设计

在网路游戏中做任务已经成为游戏很重要的一个核心功能和玩法,如何做好一个灵活可扩展的任务系统的架构与设计,今天来给大家分享一些我们的设计经验。接下来我把整个的任务系统分成以下6个模块:对于单机游戏而言,这6个模块都放在客户端直接处理,对于网路游戏而言,模块1~5实现在服务端,模块6实现在客户端。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习unity的零基础小白,也有一些正在从事unity开发的技术大佬,欢迎你来交流学习。...

voidinit的专栏 3049

WinInet 小例子

#include <windows.h> #include <wininet.h> #include <string> #include <iostream> #include <fstream> using namespace std; #pragma comm...

dongbi0665的博客 212

比较器和运算放大器-2

今天继续了解输入阻抗问题,观察下图:首先考虑在我们没有接运放时,A点输出电压为6V,当接入如图所示的阻抗时电压还是6V吗?共模电阻和红框内对地电阻并联,阻值变小,相当于5k,通过计算可以求得A点电压变为4V,这样A的值发生了改变,试想一下这样的信号接入到运放的两端是不是相当于比较的两端信号发生了改变,那结果一定会发生偏离。信号源一般内阻是不确定的,一般也不是很小,如果不想改变输入阻抗,那唯一的办法就是改变运放的内阻了,比如内阻改为100K,1M等,越大越好,是不是A点电压就会无限接近6V。

weixin_42855218的博客 1312

爱加密SFSecurity加固逆向分析:从Frida Hook到DEX/SO解密实战

在移动应用安全领域,代码加固是保护核心逻辑与数据的关键技术。其基本原理是通过加密、混淆和运行时保护等手段,防止应用被逆向分析与篡改。这项技术的核心价值在于为开发者提供商业级的安全保障,尤其适用于金融、游戏、阅读等对代码安全要求较高的应用场景。以爱加密企业版SFSecurity方案为例,它构建了从DEX到Native层的立体化防护体系。本次实战通过Frida动态插桩技术,深入剖析了如何系统性地绕过其反调试机制,并精准Hook解密函数,成功从内存中Dump出被保护的原始DEX与SO文件,完整还原了应用逻辑,为安

weixin_42539414的博客 892

利用WinInet和多线程实现实时显示的下载进度条

利用WinInet和多线程实现下载进度实时显示   作者:阿珊境界   源代码下载 大家对Internet文件下载一定不陌生,如果不讲究下载细节,一个API函数URLDownloadToFile就能搞定。但如果你要下载的数据量较大,或你的软件需要在线升级,那么,还是给个进度条让用户看看,免得让人以为你的软件已经挂掉。要实现这些,首先用到的就是多线程技术,把下载线程和界面线

阿珊境界 5666

【加密社】私钥碰撞器,秒杀市面上的碰撞器

基于上述的逻辑和代码,开发了ETH挖掘器(图1.1)这里有个亮点是:1.很多开发者在判断地址是否有效的环节上,用的是查询余额,其实这是不对的,查询余额你可能只能查询对应代币的余额,例如usdt,eth等但是如果用查询交易次数就不一样了,你只要是交易过,我就认为是有效钱包,这样的速度比查询余额要快,也要更准确。2.rpc节点可配置。

加密社的博客 1582

公用函数

MSDN 2005 -> Win32 和 COM 开发 -> Networking -> Networking Protocols -> Windows Internet -> About WinINet -> Common Functions 公用函数 FTP、HTTP和Gopher等不同的协议使用一些相同的WinINet函数来处理互联网上的信息。无论应用到什么协议,这些公用函数以一致的方式完成其任务。应用程序可以用这些函数来创建处理跨越不同协议的任务(如在FTP、HTTP和Gopher协议中读取文件)

岁月无痕 1930

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6421

AI学习记录 - transformer的位置编码的理解

先看三角函数为什么可以,我们看下三角函数的图像先提一个点:位置信息肯定是唯一的,或者是在很长的文字当中,起码重复度不会太高,x轴代表位置,y轴代表叠加上去的值1、假设只使用一个三角函数sin,我们将第2和第14两个位置输入到sin,他们的值很像,在神经网络的训练中,很容易把第2个位置和第14个位置当成是一个位置,不满足我们上面说到的要求位置唯一性。sin2sin14。

weixin_43954090的博客 1414

基于MFC实现的简单FTP客户端

在WINDOWS环境下,使用VC++开发工具实现一个FTP客户端软件。在本次FTP的设计中主要使用WinInet API编程,无需考虑基本的通信协议和底层的数据传输工作,MFC提供的WinInet类是对WinInet API函数封装而来的,它为用户提供了更加方便的编程接口。而在该设计中,使用的类包括 CInternetSession类、CFtpConnection类和CFtpFileFind类,其...

demongwc的博客 883

YOLO26涨点改进| TGRS 2026 | 独家自研创新、检测头改进篇| AHATHead自适应混合注意力检测头,二次创新,强化特征表达与目标判别能力,适合遥感小目标检测、小目标检测有效涨点

🔥本文提出了一种改进YOLO26模型的AHATHead自适应混合注意力检测头,通过融合全局与局部注意力机制增强特征表达能力。该方法采用动态权重分配策略,在预测阶段自动调整关键区域与通道特征权重,有效提升小目标和密集场景的检测性能。实验表明,AHATHead在保持较高推理效率的同时,显著提高了目标定位精度与类别判别能力。文章详细介绍了模块结构、实现原理和代码集成步骤,并提供了两种改进配置方案(yolo26_AHATHead.yaml和yolo26_RFHA-YOLO-AHATHead.yaml)

Ai缝合怪、助力小伙伴高效发论文 160

HTTP代理实现请求报文的拦截与篡改8补--自动设置与取消ADSL拔号连接的代理

返回目录    在本系列的8--自动设置与取消代理中,我们讲了自动设置与取消代理的功能,但有朋友反应那个只能设置默认的局域网代理,对于ADSL拔号连接的代理设置,就无能为力了,故而在这里我们就补讲一下ADSL拔号的代理设置方法,本来这个应该直接在8中进行修改的,但因为有源码的变动,所以单独开了一个补篇,以方便最新的源码下载。 HTTP代理实现请求报文的拦截与篡改1--开篇 ...

weixin_30597269的博客 165

零基础学习CANoe Panel(17)—— Panel CAPL Function

CANoe内置了几个CAPLFunction,允许我们在CAPL运行时动态的更改Panel控件的属性,比如打开某个panel,禁用某个控件,更改控件颜色等。

蚂蚁小兵 3520

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

使用WinINet获取网页源代码

#include #include #include #pragma comment(lib,"Wininet.lib") #include using namespace std; int main(int argc, char* argv[]) { vector v; CHAR szUrl[] = "http://www.baidu.com/"; CHAR s

sdcxyz的专栏 2390

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WinInet使用详解

WinInet是windows平台对socket进行一层封装,用来直接处理http/ftp/Gopher协议的一套windows API。我第一次接触这个是在一个客户那里,当时因为客户都需要使用http代理才能浏览网页,所以折腾了一天,才基本掌握。而时隔没多久又忘记的差不多了,这个流程就像正则表达式一样,常学常忘,常忘常学。而网络上流传的WinInet代码实例,不是编译不通过,就是粗制滥造。因此现

左雪菲的专栏 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

wininet内部实现探索

wininert内部实现探索,来看一些本质的东西。

XiaoZuoay的专栏 2055

[源码和文档分享]基于WinInet实现的HTTP文件下载

背景 之前写过的网络数据传输的小程序都是基于Socket去写的,所以,如果要用Socket传输数据到网站,还需要根据域名获取服务器的IP地址,然后再建立连接,传输数据。虽然,Socket也可以实现网络传输,但是,总感觉不是很方便。所以,后来随着知识面的拓展,了解到Windows还专门提供了WinInet网络库,封装了比较简便的接口,去实现HTTP和FTP等...

qq_38474647的博客 204

vc wininet api 下载文件

下载文件 Download(const CString& strFileURLInServer, //待下载文件的URL const CString & strFileLocalFullPath)//存放到本地的路径 { ASSERT(strFileURLInServer != ""); ASSERT(strFileLocalFullPath != ""); CInternetSess

woshidaniu的专栏 1115

使用windows api 从网上下载文件

作者: crashsky qq:36460382在vckbase上看见的是采用mfc的代码,我就写了个api的,这个代码可以不用mfc //首先加入所需的头文件#include #include #include #include //加入连接库#pragma comment(lib, "wininet.lib")int main(int argc, char* argv[]){ printf("

STEP BY STEP 2387

利用WinInet下载文件

之前写遇到了不少问题 void WebMutal(TCHAR *lpURL) { //先判断是否联网 if (!::InternetCheckConnection(lpURL, FLAG_ICC_FORCE_CONNECTION, 0)) { return; // 未联网 } // 解析URL以及他的组成部分 TCHAR szHo

1457

使用wininet实现网络资源的下载

BOOL CHttpOperation::httpDownLoadFile() { wchar_t wuserAgent[BUF_SIZE] = { 0 }; CharToWchar(m_userAgent.c_str(), wuserAgent); m_hOpenNet = InternetOpen(wuserAgent, INTERNET_OPEN_TYPE_DIRECT, NULL,

追梦littleBoy的博客 576

使用wininet的InternetReadFile下载文件

简单地说,wininet是微软提供的用来制作网络客户端程序的类库,它封装了winsock,为开发人员提供易用的开发接口。 基本上每天我们都会从网络上上传或下载一些文件。今天就简单地使用wininet函数实现下载文件的功能。代码如下:   #include #include #include #include  #include #include #include #

cackeme的专栏 1万+
上一篇: 使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)
下一篇: 最新截获的几款木马病毒看其发展驱势
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值