1. 개요

프로그래밍 작업을 하다보면 대개 정보를 제공해 주는 서버를 통해 파일을 가져와 파싱해 사용하는 경우가 존재한다.(예를 들어 기상청의 기상정보 xml 파일을 가져온다는 등)

이를 위해 실제 파일을 가져 올 수 있는 함수가 존재하여 포스팅 해보도록 하겠다.

 

2. 소스

HINTERNET   m_hInternet, m_hURL;	// URL 파일 다운에 필요한 핸들
DWORD dwValue = 10000;
HANDLE hFile;	// 다운 받은 파일 저장 핸들
DWORD dwSize = 0, dwRead = 0, dwWritten = 0;

// Set Internet Open
m_hInternet = InternetOpen ("AZITROAPPDOWN", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

 
// Open Option
InternetSetOption (m_hInternet, INTERNET_OPTION_CONNECT_TIMEOUT, &dwValue, sizeof(dwValue));
InternetSetOption (m_hInternet, INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT, &dwValue, sizeof(dwValue));
InternetSetOption (m_hInternet, INTERNET_OPTION_CONTROL_SEND_TIMEOUT, &dwValue, sizeof(dwValue));
InternetSetOption (m_hInternet, INTERNET_OPTION_DATA_SEND_TIMEOUT, &dwValue, sizeof(dwValue));
InternetSetOption (m_hInternet, INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, &dwValue, sizeof(dwValue));

// URL Open
m_hURL= InternetOpenUrl (m_hInternet, "파일을 다운 받을 URL 주소", NULL, 0, INTERNET_FLAG_RELOAD, 0);
 

// URL Open 실패를 방지 하기 위한 루틴
TCHAR *szStatusCode = (TCHAR*)malloc(10000);
DWORD dwInfoSize = sizeof(szStatusCode);
HttpQueryInfo(m_hURL, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL);
long nStatusCode = _ttol(szStatusCode);

if(nStatusCode == HTTP_STATUS_OK)
{
	// 다운 받은 파일을 저장할 파일 생성
	hFile = CreateFile (szAlertPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	InternetQueryDataAvailable (m_hURL, &dwSize, 0, 0);	// 파일로 저장할 버퍼 크기 알아냄
	InternetReadFile (m_hURL, pDownBuf, dwSize, &dwRead);	// 알아낸 크기 만큼 읽기(dwRead는 실제 읽은 크기)
	WriteFile (hFile, pDownBuf, dwRead, &dwWritten, NULL);	//  읽은 크기만큼 저장
}
	
// 사용이 끝난 핸들 비우기
InternetCloseHandle (m_hURL);
m_hURL = NULL;
InternetCloseHandle (m_hInternet);
m_hInternet = NULL; 

 

3. 이슈

한글 URL 인식 이슈 : http://blog.naver.com/sin_01/70147909216 참조

'프로그래밍 > C++' 카테고리의 다른 글

SNMP OID  (0) 2013.10.17
[MFC] Enter, ESC 키로 Dialog 종료 방지  (0) 2013.06.28
[MFC] 마우스 커서 모래시계(대기) 변경  (0) 2013.06.13
시간 구조체  (0) 2013.04.26
헝가리안 표기법  (0) 2013.04.24

+ Recent posts