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

C++ wininet和winsock下载文件 C++下载文件可以通过wininet或socket方式实现。1.winnet方式(如果在VS05或VS08中编译,需要设置:项目-》属性-》配置属性-》常规-》字符集-》如果是Unicode,则设置成“使用多字节字符集”) CVodStreamCache.h  #ifndef _CVodStreamCache_H#define _CVodStreamCach 阅读详情

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

#include "stdafx.h"

#include <stdio.h>
#include <Windows.h>
#include <Windowsx.h>
#include<string>
#include "wininet.h"                               //包含wininet.h文件
using namespace std;
#define MAXBLOCKSIZE 200000
#pragma comment( lib, "Wininet.lib" )                //连接到wininet.lib库
void download();

int _tmain(int argc, TCHAR* argv[]){

  download();
 

 
 
 return 0;
}


/**
 * 执行 文件下载 操作
 * @param Url: The target action url
 *
 */
void download()
{
 FILE *stream=NULL;
    fopen_s( &stream,"c:\\test.jpg", "wb" )  ;//这里只是个测试 
 HINTERNET hSession = InternetOpen(_T("Internet Explorer"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);        //打开internet会话 返回根句柄
 HINTERNET hConnect=NULL;
 HINTERNET hRequest=NULL;
 if (hSession != NULL)
 {
 
  HINTERNET handle2 = InternetOpenUrl(hSession,_T("http://58.218.199.175/VS4.1.rar"),NULL, 0,INTERNET_FLAG_DONT_CACHE, 0);  //打开URL所指的文件,返回文件句柄这里以下载一个 VS游戏平台为例子
  DWORD dwBytesStreamFile=0;
  DWORD dwIndex;
  DWORD BufLen=8;

  DWORD RetQueryInfo=HttpQueryInfo(handle2,HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,(LPVOID)&dwBytesStreamFile, &BufLen,NULL);//查询报头中的信息,如文件长度。   //HTTP_QUERY_FLAG_NUMBER 参数必不可少 否则可能因为字符串编码问题接受不到正确的大小。
 
  printf("%lu",dwBytesStreamFile);
  if (handle2 != NULL)
  {
   byte Temp[MAXBLOCKSIZE];
   ULONG Number = 1;


   if(stream==NULL)
    printf("NULL File");
 
    while (Number > 0)
    {
     InternetReadFile(handle2, Temp, MAXBLOCKSIZE - 1, &Number);
 
     //fprintf(stream, (const char*)Temp);
     fwrite(Temp, sizeof (char), Number , stream);
    }
    fclose( stream );
   }
   InternetCloseHandle(handle2);
   handle2 = NULL;
  InternetCloseHandle(hSession);
  hSession = NULL;
 }
}

分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信 🔥 分享一个我自用的 Python 消息发送模块,支持邮件、钉钉、企业微信 阅读详情

相关推荐

Mac下Neo4j的安装、配置及Error汇总

Mac 配置 jdk环境(图文) 卸载jdk

Yale-曼陀罗 1579

使用wininetAPI下载internet文件的源码

//#include #include #include #include #pragma comment(lib,"Wininet")int GetInternetFile(char *szFileUrl,char *szFileName);int InternetGetFile(char *szFileUrl,char *szFileName);int main(int argc,

1310

PLC1200对多个ModbusRtu设备快速轮询程序

西门子PLC1200中ModbusRtu通信中对多个设备和多个数据块的快速轮询程序,该程序中展示了3个设备的轮询。里面有详细的注释,可根据远程序进行优化。适用PLC:西门子1200编程工具:博图v17版本通信方式:ModbusRtu通信

WinInet 小例子

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

dongbi0665的博客 211

如何使用 WinInet 提供下载 / 限上载进度信息

 概要loadTOCNode(1, summary);是使用 WinInet 函数来下载或上载文件在 Internet 上许多开发人员要提供一个进度栏来指示完成文件传输的数量和不再将花费多少。 要做到这与以下机制。 更多信息loadTOCNode(1, moreinformation);以获取有关下载进度通知使用 InternetSetStatusCallb

1141

Wininetdll函数库:根据url获取缓存文件

using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace ConsoleApplication34{ class Program { [StructLayout(LayoutKi

jinjazz 3209

使用WinINet实现HTTP下载者

网上很难找到比较好的使用WinINet实现HTTP下载的代码,经过半天的研究MSDN(可以搜索关键字:MSDN HTTP sessions,链接:http://msdn.microsoft.com/en-us/library/aa384322(v=vs.85).aspx),还有在google的code搜索中找了一些例子(比如:这里),终于自己实现了一个简单的下载函数,记录到这里备忘。函数特点:通过

冷风 6181

简单的WinInet编程

windows程序 // tt.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #pragma comment(lib,"Winmm.lib") #include #pragma comment(lib, "urlmon.lib") #include #pragma comment(lib,"Wininet

liujiayu2的专栏 1224

通过wininet获取网页源码在例子

function GetWebPage(const Url: string):string; var   Session,   HttpFile:HINTERNET;  // uses + WinInet   szSizeBuffer:Pointer;   dwLengthSizeBuffer:DWord;   dwReserved:DWord;   dwFileSize:DWord

疯流人物 726

wininet实现ftp客户端关于传输进度的分析

wininet提供了接口FtpGetFile实现从ftp服务器下载文件;提供了接口FtpPutFile实现把文件上传到ftp服务器上。通过这两个接口,我们能够完成基本的ftp文件传输客户端功能。但是在传输的同时,我们希望知道当前大概传输了多少,传输完整个文件大概需要多长时间,当前进度是多少,大概还有多长时间才能传输完毕。 单纯依靠这两个接口,我们无法实现这个功能。仔细翻阅msdn,发现winine

flyelf的专栏 3368

获取ftpserver 文件大小的问题

从客户端获取ftp服务器端的文件的大小时,发现以下几种方法对获取5G(不确定是准确的分水岭)以上文件的大小,返回值不正确。 way 1:GetLength();way 2:GetFileSize(hFile, &dwFileSizeHigh);way3:FtpGetFileSize(hFtp3, &dwhighFileSize3);此函数在新版的WinInet.dll中才有。但使用

of的专栏 2623

基于MFC与WinInet的FTP客户端开发:网络编程与桌面应用实战

网络编程是计算机通信的基础,其核心在于实现不同主机间的数据交换。FTP(文件传输协议)作为经典的应用层协议,通过客户端-服务器模型,在特定端口上建立控制与数据连接,完成文件的上传、下载与管理。在Windows桌面开发领域,MFC(Microsoft Foundation Classes)框架为构建原生GUI应用提供了高效封装,而WinInet API则简化了HTTP、FTP等协议的实现,避免了从Socket开始的复杂编程。这种技术组合对于开发需要精细控制Windows资源、且注重执行效率的工具软件具有显著价

weixin_34072637的博客 334

InternetOpenUrl 函数

  InternetOpenUrl函数通过一个完整的FTP,Gopher或HTTP网址打开一个资源。HINTERNET InternetOpenUrl (__in HINTERNET hInternet ,__in LPCTSTR lpszUrl ,__in LPCTSTR lpszHeaders ,__in DWORD值dwHeadersLength ,__i

jadedrip的专栏 6595
上一篇: VS 字符编码类型转换 (wchar_t, char,TCHAR 的区别)
下一篇: C++ List的用法
qq287597590
博客等级 码龄16年 5粉丝 31原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值