找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6671|回复: 4

[转载]UrlDownloadToFile的模拟实现

  [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-4-23 00:52:33 | 显示全部楼层 |阅读模式
UrlDownloadToFile这个函数真是倒霉,入了永远不能翻身的杀软黑名单。。。
上次我要写一个需要下载文件的软件,为需要调用此函数感到深深的苦恼。
乔丹饿死同学竟然找到这么一份代码,自己实现了UrlDownloadToFile:

  1. // Downer.cpp : Defines the entry point for the application.
  2. // data :2010.06.09
  3. // author: leehu

  4. #include <windows.h>
  5. #include <wininet.h>
  6. #include <stdio.h>
  7. #pragma comment(lib,"winmm.lib")
  8. #pragma comment(lib,"Wininet.lib")

  9. void InternetDownFile(char szUrl[100],char szFileName[100])
  10. {
  11. DWORD dwFlags;
  12. if(!InternetGetConnectedState(&dwFlags,0))
  13. {
  14.    return ;
  15. }
  16. char strAgent[64];
  17. sprintf(strAgent,"Agent%ld",timeGetTime());
  18. HINTERNET hOpen;

  19. if(!(dwFlags & INTERNET_CONNECTION_PROXY))
  20. {
  21.    hOpen = InternetOpen(strAgent,INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,NULL,NULL,0);
  22. }
  23. else
  24. {
  25.    hOpen = InternetOpenA("win",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
  26. }

  27. if(!hOpen)
  28. {
  29.    return ;
  30. }

  31. DWORD dwSize;
  32. char szHead[] = "Accept: */*\r\n\r\n";
  33. void* szTemp[20012];
  34. HINTERNET hConnect;
  35. HANDLE hFile;

  36. if(!(hConnect = InternetOpenUrlA(hOpen,szUrl,szHead,strlen(szHead),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_RELOAD,0)))
  37. {
  38.    return ;
  39. }
  40. hFile=CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  41. if(hFile==INVALID_HANDLE_VALUE)
  42. {
  43.    DWORD dwByteToRead = 0;
  44.    DWORD dwByteToWrite;
  45.    DWORD dwSizeOfRq = 4;
  46.    DWORD dwBytes = 0;
  47.   
  48.    hFile=CreateFile(szFileName,FILE_SHARE_WRITE,FILE_SHARE_READ,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0);
  49.    if(!HttpQueryInfo(hConnect,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,(LPVOID)&dwByteToRead,&dwSizeOfRq,NULL))
  50.    {
  51.     dwByteToRead = 0;
  52.    }
  53.   
  54.    do
  55.    {
  56.     if(!InternetReadFile(hConnect,szTemp,20012,&dwSize))
  57.     {
  58.      InternetCloseHandle(hOpen);
  59.      CloseHandle(hFile);
  60.      return ;
  61.     }
  62.     if(dwSize == 0)
  63.      break;
  64.     else
  65.      WriteFile(hFile,szTemp,dwSize,&dwByteToWrite,NULL);
  66.    
  67.    }while(true);
  68.   
  69.    CloseHandle(hFile);
  70.    InternetCloseHandle(hOpen);
  71. }
  72. return ;
  73. }

  74. int WINAPI WinMain(HINSTANCE hInstance,
  75.                      HINSTANCE hPrevInstance,
  76.                      LPSTR     lpCmdLine,
  77.                      int       nCmdShow)
  78. {

  79.     InternetDownFile("url","path");

  80. return 0;
  81. }
复制代码
深深膜拜乔二的找代码能力,顺便深深鄙视那些乱报毒的AV。

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2011-4-23 09:52:47 | 显示全部楼层
但是乔丹提供的很多代码就不能下载了

请乔丹重新上传

3q

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-4-23 10:07:33 | 显示全部楼层
饿死同学~很强大~很想知道这些代码哪找的~很诡异相当诡异~

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-4-23 17:35:13 | 显示全部楼层
回复 ok100fen 的帖子

不知道是不是他上传时的错误,还是论坛的问题??
我就是嗷嗷叫的老马了......

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2011-4-23 19:28:31 | 显示全部楼层
回复 ywledoc 的帖子

据乔丹二死他自己说,他在很多论坛有帐号,而且即使是低权限的帐号,也能看到高权限的板块!不知道是不是真的!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表