使用wininetAPI下载internet文件的源码

拥有AI助手便能解放双手?——抖音直播脚本的生成 科技改变生活,AI助手帮你完成抖音创作! 阅读详情

//#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;
 

微信小程序 - request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task请求报错 微信小程序请求接口,报request:fail errcode:10011是什么原因,uniapp微信小程序request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task,微信小程序wx.request常规访问接口,有个别用户的接口请求频繁报错,UniApp 微信小程序uni.request请求接口报错:request:fail errcode:10011 的原因分析与解决方案,苹果ios,安卓 阅读详情

相关推荐

基于wininet下的HTTP访问之代理服务器 源代码

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

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

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

qq287597590的专栏 1521

利用wininet下载文件的源代码

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

WinInet 小例子

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

dongbi0665的博客 211

公用函数

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

岁月无痕 1929

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

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

阿珊境界 5660

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

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

demongwc的博客 880

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

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

weixin_30597269的博客 162

使用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的专栏 2385

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实现的HTTP文件下载

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

qq_38474647的博客 203

WinInet使用详解

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

左雪菲的专栏 2万+

wininet内部实现探索

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

XiaoZuoay的专栏 2053

vc wininet api 下载文件

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

woshidaniu的专栏 1114

利用WinInet下载文件

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

1455

使用wininet的InternetReadFile下载文件

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

cackeme的专栏 1万+

使用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 2383

使用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的博客 572

南昌大学金工实习数控车床cimco课件编程.docx编程资料

南昌大学金工实习数控车床cimco课件编程.docx

上一篇: 使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)
下一篇: 最新截获的几款木马病毒看其发展驱势
iiprogram
博客等级 码龄25年 1066粉丝 1515原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值