프로그래밍 노트

HTTP를 통해 파일 다운로드하기 본문

C++ TIP

HTTP를 통해 파일 다운로드하기

띠리 2007. 4. 20. 19:38
웹에서 파일을 다운로드하려면 어떻게 해야되나 궁금했는데
아래같이 하면 간단하게 웹에 올라온 파일들을 다운로드 받을 수 있다.

getFileFromHttp("http://tattertools.com/ko/tistoryBanner01.gif", "tistoryBanner01.gif");

이미지 파일을 다운 받으려면 어떻게 해야되는지 몰라서 한참 해맸다.
URL에는 파일명까지 들어가야된다. 그리고 저장할 파일의 이름을 지정한다.
특정 폴더에 파일을 저장하려면 저장할 파일에 패스를 입력하면된다.
예를 들어 URL을 이렇게 주고 "http://wwwi.tistory.com/"
저장할 파일을 "test.html"로 주면 http://wwwi.tistory.com/의 첫페이지가  test.html로 저장된다.



======================================================================


#include "Wininet.h"      //  밑의 함수를 쓰려면 이 라인을 반드시 추가해야 됨


#define READ_BUF_SIZE    1024




// 웹상의 파일을 다운로드

int getFileFromHttp(char* pszUrl, char* pszFile)

{

    HINTERNET    hInet, hUrl;

    DWORD        dwReadSize = 0;


    // WinINet함수 초기화

    if ((hInet = InternetOpen("MyWeb",            // 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 = 10;


                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);

}



void CDownloadFromHttpDlg::OnBnClickedOk()

{

    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

    getFileFromHttp("http://tattertools.com/ko/tistoryBanner01.gif", "tistoryBanner01.gif");


    OnOK();

}


======================================================================



Comments