개발, 연습

[C/WINAPI] 인터넷 파일 다운로드

Injel me 2020. 7. 1. 18:55
인터넷에 있는 파일을 다운로드 받을 수 있는 코드를 짜 보았다.
wininet.h 헤더에 있는 함수들로, 인터넷 검색을 통하여 예제들을 시험해 보며 짰다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "Winfiledown.h"
int downloadFile(const char * server, const char * filename) {
    HINTERNET hinet, hurl;
    DWORD size, readsize;
    TCHAR *buffer;
    FILE * wfp;
    hinet = InternetOpen("HTTPS",
        INTERNET_OPEN_TYPE_DIRECT,
        NULL,
        NULL,
        0);
    if (hinet == NULLreturn GetLastError();
    hurl = InternetOpenUrl(hinet,
        server,
        NULL,
        0,
        INTERNET_FLAG_KEEP_CONNECTION,
        0);
    if (hurl == NULL) {
        InternetCloseHandle(hinet);
        return GetLastError();
    }
    wfp = fopen(filename, "wb");
    if (wfp == NULL) {
        InternetCloseHandle(hurl);
        InternetCloseHandle(hinet);
        return GetLastError();
    }
    buffer = (TCHAR*)malloc(sizeof(TCHAR) * SIZE_BUF);
    do  {
        InternetQueryDataAvailable(hurl, &size00);
        if (size > 1024 * 1024size = 1024 * 1024;
        InternetReadFile(hurl, buffer, size&readsize);
        fwrite(buffer, size1, wfp);
    } while (size != 0);
    InternetCloseHandle(hurl);
    InternetCloseHandle(hinet);
    hurl = NULL;
    hinet = NULL;
    fclose(wfp);
    free(buffer);
    return 0;
}
cs

InternetOpen()함수와 InternetOpenURL, InteInternetReadFile 함수 등으로 인터넷 상의 파일을 다운로드 받을 수 있다.

이 내용을 함수로 추려서 downloadFile()함수를 짜 두었다. 편의성을 위해, 나중에 코드 공부하면서 다시 찾아볼 수 있게 말이다.

사용법은 downloadFile("https://www.naver.com", "naver.html"); 이렇게 사용할 수 있다.


파일을 오브젝트 파일과 헤더 파일로 만들어서, 구별해 두었다.

DownloadFromInternet

오브젝트 파일을 컴파일 시 추가해서 컴파일 해도 되고, c와 헤더를 가지고 직접 추가해서 컴파일 해도 된다.

gcc 를 통한 컴파일 시 오브젝트 파일 추가던 c + 헤더던간에 -lwininet 옵션을 추가해야 한다.



추가로 이를 이용한 개발 환경 툴 다운로더를 만들었다.
MinGW setup.exe 파일과 sublime text 3 현 최신 버전 portable version .zip 를 다운받아 주는 프로그램이다.

fast_dev_env_downloader



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include "Winfiledown.h"
int main(int argc, char const ** argv)
{
    int sel;
    int erc;
    char * server[256= {
        "https://download.sublimetext.com/Sublime%20Text%20Build%203211.zip",
        "https://mirrors.xtom.com.hk/osdn//mingw/68260/mingw-get-setup.exe"
    };
    char * filename[128= {
        "Sublime3.zip",
        "MinGW_get_setup.exe"
    };
    downloadFile(server[1], filename[1]);
    downloadFile(server[0], filename[0]);
    return 0;
}
cs

'개발, 연습' 카테고리의 다른 글

[c++] 열혈 c++ 문제 4-X  (0) 2020.07.01
[프로그래밍] 프로그램 다운로드 툴  (0) 2020.07.01
2019 HackCon 후기  (0) 2020.07.01
파일 릴리즈 배포와 디지털 서명 cert  (0) 2020.07.01
인스톨러 제작 프로젝트  (0) 2020.07.01