음..
기존 클라이언트 중에
FTP 로 접근해서 txt 데이터를 읽어오는 부분이있었다.
근데 뭐.. FTP 는 보안상 취약하니 어쩌니.. 두둥.
그래서 다른방법을 찾아보던중 아래와 같이 HTTP 를 사용한 다운로드방식이 있기에 쉽게 적용이 가능하여 도입해보았다.
작동도 잘되고 만족 만족.
모두 유용하게 사용하세요 !
[출처 : http://wwwi.tistory.com/35]
웹에서 파일을 다운로드하려면 어떻게 해야되나 궁금했는데
아래같이 하면 간단하게 웹에 올라온 파일들을 다운로드 받을 수 있다.
getFileFromHttp("http://tattertools.com/ko/tistoryBanner01.gif", "tistoryBanner01.gif");
이미지 파일을 다운 받으려면 어떻게 해야되는지 몰라서 한참 해맸다.
URL에는 파일명까지 들어가야된다. 그리고 저장할 파일의 이름을 지정한다.
특정 폴더에 파일을 저장하려면 저장할 파일에 패스를 입력하면된다.
예를 들어 URL을 이렇게 주고 "http://wwwi.tistory.com/"
저장할 파일을 "test.html"로 주면 http://wwwi.tistory.com/의 첫페이지가 test.html로 저장된다.
======================================================================
#include "Wininet.h" // 밑의 함수를 쓰려면 이 라인을 반드시 추가해야 됨
#define READ_BUF_SIZE 1024
// 웹상의 파일을 다운로드
int getFileFromHttp(char* pszUrl, char* pszFile)
{
HINTERNET hInet, hUrl;
DWORD dwReadSize = 0;
// WinINet함수 초기화
if ((hInet = InternetOpen("MyWeb", // 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 = 10;
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);
}
댓글
댓글 쓰기