[转载]UrlDownloadToFile的模拟实现
UrlDownloadToFile这个函数真是倒霉,入了永远不能翻身的杀软黑名单。。。上次我要写一个需要下载文件的软件,为需要调用此函数感到深深的苦恼。
乔丹饿死同学竟然找到这么一份代码,自己实现了UrlDownloadToFile:
// Downer.cpp : Defines the entry point for the application.
// data :2010.06.09
// author: leehu
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"Wininet.lib")
void InternetDownFile(char szUrl,char szFileName)
{
DWORD dwFlags;
if(!InternetGetConnectedState(&dwFlags,0))
{
return ;
}
char strAgent;
sprintf(strAgent,"Agent%ld",timeGetTime());
HINTERNET hOpen;
if(!(dwFlags & INTERNET_CONNECTION_PROXY))
{
hOpen = InternetOpen(strAgent,INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,NULL,NULL,0);
}
else
{
hOpen = InternetOpenA("win",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
}
if(!hOpen)
{
return ;
}
DWORD dwSize;
char szHead[] = "Accept: */*\r\n\r\n";
void* szTemp;
HINTERNET hConnect;
HANDLE hFile;
if(!(hConnect = InternetOpenUrlA(hOpen,szUrl,szHead,strlen(szHead),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_RELOAD,0)))
{
return ;
}
hFile=CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE)
{
DWORD dwByteToRead = 0;
DWORD dwByteToWrite;
DWORD dwSizeOfRq = 4;
DWORD dwBytes = 0;
hFile=CreateFile(szFileName,FILE_SHARE_WRITE,FILE_SHARE_READ,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0);
if(!HttpQueryInfo(hConnect,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,(LPVOID)&dwByteToRead,&dwSizeOfRq,NULL))
{
dwByteToRead = 0;
}
do
{
if(!InternetReadFile(hConnect,szTemp,20012,&dwSize))
{
InternetCloseHandle(hOpen);
CloseHandle(hFile);
return ;
}
if(dwSize == 0)
break;
else
WriteFile(hFile,szTemp,dwSize,&dwByteToWrite,NULL);
}while(true);
CloseHandle(hFile);
InternetCloseHandle(hOpen);
}
return ;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
InternetDownFile("url","path");
return 0;
}
深深膜拜乔二的找代码能力,顺便深深鄙视那些乱报毒的AV。 但是乔丹提供的很多代码就不能下载了
请乔丹重新上传
3q 饿死同学~很强大~很想知道这些代码哪找的~很诡异相当诡异~ 回复 ok100fen 的帖子
不知道是不是他上传时的错误,还是论坛的问题?? 回复 ywledoc 的帖子
据乔丹二死他自己说,他在很多论坛有帐号,而且即使是低权限的帐号,也能看到高权限的板块!不知道是不是真的!
页:
[1]