C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[518] API를 이용한 웹 페이지 내용이나 파일을 받는 가장 간단한 방법.
김태선 [jsdkts] 7721 읽음    2005-11-25 15:18
보통은 인디나 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 의 추가가 필요합니다.

이상 심심풀이에 팁이었습니다.
박정진.바보 [reilover]   2005-11-26 10:42 X
덧붙이는 팁!
반복 다운로드시 파일 크기가 같다면 캐쉬에서 읽어오더군요.
그래서 등장한 함수.
DeleteUrlCacheEntry(PURL.c_str());
캐쉬를 지워줍니다..^^;;
김태선 [jsdkts]   2005-11-26 17:15 X
좋은 정보군요.
옛날 자료 정리하다가 그 중에 하나 올린 것인데, 말씀하신 사항을 깜빡 했었네요. ^^;
김태선 [cppbuilder]   2008-02-26 17:15 X
DeleteUrlCacheEntry(PURL.c_str());

이 함수 라이브러리는
#pragma link "Wininet.lib"
요렇게 링크해서 쓸수 있습니다.

+ -

관련 글 리스트
518 API를 이용한 웹 페이지 내용이나 파일을 받는 가장 간단한 방법. 김태선 7721 2005/11/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.