티스토리 뷰
wininet
wininet api를 이용하여 인터넷에서 파일을 다운로드 받을 수 있다.
간단하게 흐름을 보면 아래와 같다.
1. 인터넷 open
hinet = InternetOpen(_T("Test"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
2. open된 인터넷 핸들에 connect → request 핸들 얻기 ( POST/GET 에 따른 ) → 얻은 핸들을 사용하여 request 보내기
hconnect = InternetConnect(hinet, _T("download.microsoft.com"), INTERNET_DEFAULT_HTTP_PORT, _T(""), _T(""), INTERNET_SERVICE_HTTP, 0, 0); hreq = HttpOpenRequest(hconnect, _T("GET"), _T("/download/ .. 생략 "), NULL, NULL, NULL, 0, 0); HttpSendRequest(hreq, NULL, 0, NULL, 0);
위의 connect → open request → send request 의 세가지 과정을 open url 하나로 할 수 있다고 한다. (아래 참고)
hurl = InternetOpenUrl(hinet, _T("http://download.microsoft.com/download/ .. 생략 "), NULL, 0, 0, 0);
3. 파일의 전체 크기 등 정보를 얻기 ( query 통해서 )
HttpQueryInfo(hurl, HTTP_QUERY_CONTENT_LENGTH, buf, &dwSize, NULL);
4. 서버가 보낼 수 있는 양을 확인 후, 서버로 부터 데이터를 읽기
InternetQueryDataAvailable(p->hreq, &toRead,0,0); InternetReadFile(p->hreq, pbuf, toRead, &dwReadSize);
4번 과정 이후로는 읽어온 데이터는 pbuf 에 들어있을테니까
WriteFile을 통해서 읽어온 데이터를 쓰고싶은 위치에 쓰면 파일 다운로드가 완료될 것이다!
( createfile 통해 핸들 얻기 → writefile → close 핸들 )
InternetReadFile을 통해서 얼만큼 읽어왔는지 dwReadSize를 통해 확인하고
전체 파일 크기는 HttpQueryInfo를 통해 확인할 수 있다.
전체 파일 크기중 얼만큼 읽었는지 확인하면서 InternetReadFile 을 반복하여 실행하여 전체를 다 읽는다.
전체 파일을 다 읽었으면 InternetCloseHandle을 통해 request, connection, open 에 대하여 모든 핸들을 닫아준다.
( HttpOpenRequest, InternetConnect, InternetOpen 으로 열었던 핸들 )
파라미터에 대한 설명들과 사용법이 잘 정리된 곳이 있어 링크 남겨요 ;)
'windows' 카테고리의 다른 글
memory leak tool (1) _ CRT Debugging (0) | 2019.12.24 |
---|---|
[windbg] 명령어 정리 (0) | 2018.09.19 |
[windbg] 심볼패스 설정, 덤프파일 분석 (1) | 2018.09.07 |
DuplicateHandle() - 오브젝트 핸들 복사, 현재 프로세스의 진짜 핸들 (0) | 2018.07.23 |
[ lib / dll ]라이브러리의 개념과 종류 (0) | 2018.06.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 퀵정렬
- debug
- WinDbg
- frameLayout
- 안드로이드
- Android
- 알고리즘
- C++
- BOJ
- DATABASE
- 스프링
- 백준알고리즘
- 스프링부트
- 윈도우
- 백준
- C
- 정렬 알고리즘
- handshake
- adapter
- 네트워크
- RelativeLayout
- 이진탐색트리
- layout
- windows
- ConstraintLayout
- OS
- listview
- LinearLayout
- 운영체제
- HTTP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함