Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

Code Habit

HTTP 통해 웹상의 파일 다운로드 하기 본문

카테고리 없음

HTTP 통해 웹상의 파일 다운로드 하기

코드베어 2020. 5. 7. 18:53

WIN32환경에서 http protocol을 이용하여 웹상의 이미지 파일을 다운로드 하는 예제이다.

#include <WinInet.h>
 
#define READ_BUF_SIZE 4096
 
DWORD DownloadImgtoLocal(char* _pszUrl, char* _pszfile)
{
    if!_pszUrl || _pszfile ) {
        return -1;
    }
 
    USES_CONVERSION;
 
    // 웹상의 파일을 다운로드
    HINTERNET    hInet, hUrl;
    DWORD        dwReadSize = 0;
 
    // WinINet함수 초기화
    if ((hInet = InternetOpen(L"Web",               // 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 = 40;
 
                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);
}

 

위에서 사용한 WinInet관련 함수의 기능을 간단히 설명 하자면 다음과 같다.

  • InternetOpen : 인터넷 관련 DLL들을 초기화한다.
  • InternetOpenUrl : URL에 접근을 하는데에 사용하는 함수이다.
  • InternetReadFile : 웹에서 파일을 읽어온다.
  • InternetCloseHandle : 사용한 핸들을 닫는다.