웹에서 파일을 다운로드하려면 어떻게 해야되나 궁금했는데
아래같이 하면 간단하게 웹에 올라온 파일들을 다운로드 받을 수 있다.
getFileFromHttp("http://tattertools.com/ko/tistoryBanner01.gif", "tistoryBanner01.gif");
이미지 파일을 다운 받으려면 어떻게 해야되는지 몰라서 한참 해맸다.
URL에는 파일명까지 들어가야된다. 그리고 저장할 파일의 이름을 지정한다.
특정 폴더에 파일을 저장하려면 저장할 파일에 패스를 입력하면된다.
예를 들어 URL을 이렇게 주고 "http://wwwi.tistory.com/"
저장할 파일을 "test.html"로 주면 http://wwwi.tistory.com/의 첫페이지가 test.html로 저장된다.
///////////////////////////////////////////////////////////////////////////////////
// 예제 1
#include "Wininet.h" // 밑의 함수를 쓰려면 이 라인을 반드시 추가해야 됨
#define READ_BUF_SIZE 1024
// 웹상의 파일을 다운로드
int getFileFromHttp(char* pszUrl, char* pszFile)
{
HINTERNET hInet, hUrl;
DWORD dwReadSize = 0;
// WinINet함수 초기화
if ((hInet = InternetOpen("MyWeb", // user agent in the HTTP protocol
INTERNET_OPEN_TYPE_DIRECT, // AccessType
NULL, // ProxyName
NULL, // ProxyBypass
0)) != NULL) // Options
{
// 입력된 HTTP주소를 열기
if ((hUrl = InternetOpenUrl(hInet, // 인터넷 세션의 핸들
pszUrl, // URL
NULL, // HTTP server에 보내는 해더
0, // 해더 사이즈
0, // Flag
0)) != NULL) // Context
{
FILE *fp;
// 다운로드할 파일 만들기
if ((fp = fopen(pszFile, "wb")) != NULL)
{
TCHAR szBuff[READ_BUF_SIZE];
DWORD dwSize;
DWORD dwDebug = 10;
do {
// 웹상의 파일 읽기
InternetReadFile(hUrl, szBuff, READ_BUF_SIZE, &dwSize);
// 웹상의 파일을 만들어진 파일에 써넣기
fwrite(szBuff, dwSize, 1, fp);
dwReadSize += dwSize;
} while ((dwSize != 0) || (--dwDebug != 0));
fclose( fp );
}
// 인터넷 핸들 닫기
InternetCloseHandle(hUrl);
}
// 인터넷 핸들 닫기
InternetCloseHandle(hInet);
}
return(dwReadSize);
}
// 예제 2
웹 프로토콜(HTTP)을 이용한 이미지 파일 가져오기
BOOL SaveImage(LPCTSTR szImgPath)
{
CInternetSession is;
CInternetFile* pif = NULL;
HANDLE hFile = NULL;
pif = (CInternetFile*)is.OpenURL(szImgPath, 1, INTERNET_FLAG_TRANSFER_BINARY);
if ( pif == NULL )
return FALSE;
CHAR szLocalFile[255];
wsprintf(szLocalFile, "C:\%s", pif->GetFileName());
hFile = CreateFile(szLocalFile, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
if ( hFile == INVALID_HANDLE_VALUE )
{
pif->Close();
is.Close();
return FALSE;
}
while(1)
{
INT nRead = 0;
DWORD dwWritten = 0;
CHAR szBuffer[255];
nRead = pif->Read(szBuffer, 255);
if ( nRead == 0 )
break;
WriteFile(hFile, szBuffer, nRead, &dwWritten, NULL);
}
CloseHandle(hFile);
pif->Close();
is.Close();
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////
void CDownloadFromHttpDlg::OnBnClickedOk()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
getFileFromHttp("http://tattertools.com/ko/tistoryBanner01.gif", "tistoryBanner01.gif");
SaveImage("http://tattertools.com/ko/tistoryBanner01.gif");OnOK();
}
'C & C++ > MFC Network' 카테고리의 다른 글
[IP] IE BHO 전용 브라우져 시 새창 띄울때 IE모양 바꾸기~ (0) | 2011.04.18 |
---|---|
[IP] 인터넷 임시파일 삭제 (0) | 2011.04.14 |
[IP] Web Page 다운로드 (0) | 2011.04.14 |
[IP] 자신의 IP 얻어오기 (0) | 2011.03.27 |
[IP] 네트워크 관련 (0) | 2011.01.13 |
댓글