본문 바로가기
C & C++/MFC Network

[IP] Web Page 다운로드

by izen8 2011. 4. 14.
반응형

웹페이지를 다운로드 받아야 하는 분들이 계실지도 몰라 경험담 올릴께요.

 

2번 방식은 단순히 해당 사이트의 페이지를 다운로드 받는다.

하지만 해당 페이지가 캐쉬에 남아 인터넷 익스플러어로 해당 페이지를 다시읽기전까지는

자신의 캐쉬에서 페이지를 가져온다는 점이 있다. 때문에 2번 방식으로 사용할 경우

정확히 현재의(!!) 페이지를 가져오는 것이 아니다. 페이지가 수시로 바뀔 경우

우리가 인터넷 익스플로어로 페이지를 열기전까지 가장 최근에 열었던 그 때(!)의 페이지를

캐쉬에서 가지고 온다.(전 이것 때문에 버그잡느라고 하루종일 OTL...)

 

따라서 실제 해당 주소의 페이지를 가져오고자 할 경우 1번을 사용하는 것을 추천합니다.

(물론 2번을 사용하기전에 캐쉬를 지우는 방법도 가능합니다.)

 

/*********************************************************************************************************/

BOOL CSampleDlg::DownloadWebPage(void)    //1번

/*********************************************************************************************************/

{

    DWORD dwServiceType;

    INTERNET_PORT nPort;

    CString strServer, strObject, strData;

    if(!AfxParseURL("http://www.devpia.com/Forum/", dwServiceType, strServer, strObject, nPort))

    {

        OutputDebugString("ERROR# URL Parsing\n");

        return FALSE;

    }

 

    DWORD dwRet;

    CString strHeader = "Content-Type: application/x-www-form-urlencoded";

    CInternetSession session("My Session");

    CHttpConnection* pServer = NULL;

    CHttpFile* pFile = NULL;

    try

    {

        pServer = session.GetHttpConnection(strServer, nPort);

        pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject, 0, 1, 0, 0, INTERNET_FLAG_RELOAD);

        pFile->AddRequestHeaders(strHeader);

        pFile->SendRequest();

        pFile->QueryInfoStatusCode(dwRet);

        if(dwRet == HTTP_STATUS_OK)

        {

            CString strBuf;

            CStdioFile stdFile;

 

            if(stdFile.Open("Download.html", CFile::modeCreate | CFile::modeWrite | CFile::typeText))

            {

                while(pFile->ReadString(strBuf))

                {

                    stdFile.WriteString(strBuf);

                }

                stdFile.Close();

            }

        }

        else

        {

            OutputDebugString("ERROR# HTTP_STATUS\n");

        }

 

        delete pFile;

        delete pServer;

    }

    catch(CInternetException* pEx)

    {

        TCHAR szCause[255];

        CString strError;

        

        pEx->GetErrorMessage(szCause, 255);

        strError.Format("ERROR# Connect Failed[%d] :", pEx->m_dwError);

        strError += szCause;

        strError += _T("\n");

        OutputDebugString(strError);

 

        session.Close();

        return FALSE;

    }

 

    session.Close();

    return TRUE;

}

 

/**********************************************************************************************************/

BOOL CSampleDlg::DownloadWebPage(void)    //2번

/**********************************************************************************************************/

{

    DWORD dwFlags;

    

    if(!InternetGetConnectedState(&dwFlags, 0))                             

    {

        OutputDebugString("ERROR# InternetGetConnectedState()\n");

        return FALSE;

    }

 

    if(URLDownloadToFile(NULL, "http://www.devpia.com/Forum/", "DownloadPage.html", 0, NULL) != S_OK)

    {

        OutputDebugString("ERROR# URLDownloadToFile()\n");

        return FALSE;

    }

 

    return TRUE;

}

 

MSDN)

Internet flag Description

INTERNET_FLAG_RELOAD

Forces a download of the requested file, object, or directory listing from the origin server, not from the cache.

INTERNET_FLAG_DONT_CACHE

Does not add the returned entity to the cache.

INTERNET_FLAG_MAKE_PERSISTENT

Adds the returned entity to the cache as a persistent entity. This means that standard cache cleanup, consistency checking, or garbage collection cannot remove this item from the cache.

INTERNET_FLAG_SECURE

Uses secure transaction semantics. This translates to using SSL/PCT and is only meaningful in HTTP requests

INTERNET_FLAG_NO_AUTO_REDIRECT

Used only with HTTP, specifies that redirections should not be automatically handled in CHttpFile::SendRequest.

 

 

캐쉬를 지우는 방법은 MSDN을 참고하시거나,

하기 질답글을 참고하시길 바랍니다.

http://www.devpia.com/Forum/BoardView.aspx?no=589840&ref=589626&forumname=VC_QA&stype=VCF&KeyW=medelight&KeyR=nameid

 

많은 도움 주신 조경민님께도 다시한번 감사드립니다. 복 받으실꺼예요!!!

반응형

댓글