보통은 인디나 TClientSocket 을 이용해서 웹에 접속한 뒤 내용을 받거나,
TCppWebBrowser 같은 거대한 COM 컴포넌트를 이용하는 방법이 있는데...
시스템에서 제공하는 함수를 이용하는 아주 간단한 방법이 있습니다.
아래는 제가 사용하는 소스중에 발췝니다.
//---------------------------------------------------------------------------
// 주어진 URL의 파일을 다운로드 또는 서버 asp/php등를 실행한다. 결과는 파일로 돌린다.
bool GetHTTPFile(String PURL, String SaveFilename)
{
HRESULT r = URLDownloadToFile(NULL, PURL.c_str(), SaveFilename.c_str(), 0, NULL);
if (r == S_OK)
return true;
return false;
}
//---------------------------------------------------------------------------
보시면 아시겠지만, 해당 URL과 그 결과를 저장할 파일명을 주면 한방에 됩니다.
asp, php, jsp 등으로 제작된 웹페이지나, 특정한 파일을 다운로드 할때 이용할 수 있습니다.
가장 귀잖은 방법중에 하나가 TClientSocket 을 이용하는게 있는데 이벤트 마다 처리해줄려면 좀 번거롭죠. 물론 방법만 알면 그것도 사실 쉬운 거지만...
장점은 결과를 받을때까지 함수가 종료되지 않으므로 함수 바로 밑에서 OK냐 아니냐를 바로 판단할 수 있습니다.
그리고, 파일을 다운로드 할때 그 양을 프로그레스바로 표시할 수 있으면 좋은데.. 이걸 하려면 마지막 인자의 콜백함수를 사용해야 합니다. 자세한 내용은 URLDownloadToFile 함수를 MSDN에서 찾아 보세요.
위 함수를 쓸려면
#include <urlmon.h>
와
프로젝트에
urlmon.lib 의 추가가 필요합니다.
이상 심심풀이에 팁이었습니다.
|
반복 다운로드시 파일 크기가 같다면 캐쉬에서 읽어오더군요.
그래서 등장한 함수.
DeleteUrlCacheEntry(PURL.c_str());
캐쉬를 지워줍니다..^^;;