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
- File
- c++
- Sync
- Linux
- 영화
- Close
- bitcoin
- Python
- write
- windows
- range
- http
- channel
- JavaScript
- json
- Callback
- mutex
- FOR
- install
- go
- tcp
- 리뷰
- 책
- window
- GO 언어
- Golang
- API
- C
- go언어
- package
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 : 사용한 핸들을 닫는다.