카테고리 없음
HTTP 통해 웹상의 파일 다운로드 하기
코드베어
2020. 5. 7. 18:53
WIN32환경에서 http protocol을 이용하여 웹상의 이미지 파일을 다운로드 하는 예제이다.
#include <WinInet.h>
#define READ_BUF_SIZE 4096
DWORD DownloadImgtoLocal(char* _pszUrl, char* _pszfile)
{
if( !_pszUrl || _pszfile ) {
return -1;
}
USES_CONVERSION;
// 웹상의 파일을 다운로드
HINTERNET hInet, hUrl;
DWORD dwReadSize = 0;
// WinINet함수 초기화
if ((hInet = InternetOpen(L"Web", // 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 = 40;
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);
}
|
위에서 사용한 WinInet관련 함수의 기능을 간단히 설명 하자면 다음과 같다.
- InternetOpen : 인터넷 관련 DLL들을 초기화한다.
- InternetOpenUrl : URL에 접근을 하는데에 사용하는 함수이다.
- InternetReadFile : 웹에서 파일을 읽어온다.
- InternetCloseHandle : 사용한 핸들을 닫는다.