Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- channel
- range
- Callback
- tcp
- write
- window
- Linux
- go언어
- Sync
- C
- install
- 영화
- GO 언어
- JavaScript
- package
- mutex
- windows
- 책
- API
- File
- c++
- json
- Golang
- Python
- bitcoin
- 리뷰
- FOR
- Close
- go
- http
Archives
- Today
- Total
Code Habit
HTTP 통해 웹상의 파일 다운로드 하기 본문
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 : 사용한 핸들을 닫는다.