내용으로 건너뛰기
사용자 도구
로그인
사이트 도구
도구
문서 보기
이전 판
백링크
최근 바뀜
미디어 관리
사이트맵
로그인
최근 바뀜
미디어 관리
사이트맵
기술자료
작업공간
개인공간
사이트맵
추적:
kb:windowsinternetapi
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Windows Internet API ====== Windows Internet API(WinINet API라고도 불림)는 HTTP, FTP, gopher 프로토콜을 지원하는 하이 레벨의 네트워크 API들이다. **동기와 비동기 모드 둘 다를 지원하며, 서버를 만드는 데는 사용할 수 없다.** 실제 코드가 들어있는 wininet.dll은 winsock32.dll과는 무관하다. HTTP 문서를 자동으로 캐싱해주는 기능이나, 레지스트리에 있는 프락시 서버 설정을 자동으로 이용하는 등 상당히 편리하다. ====== 인터넷 연결되었는지 알아내기 ====== 해당하는 컴퓨터가 인터넷에 연결되어있는지의 여부를 알려면 다음과 같이 하면 된다. <code cpp> BOOL IsConnectInternet() { DWORD dwFlags; BOOL bChkInternet = InternetGetConnectedState(&dwFlags,0); if(!bChkInternet) return FALSE; return TRUE; } </code> <code>InternetGetConnectedState</code> 함수는 인터넷에 연결되어 있는 경우에만 TRUE를 리턴한다. 위의 예제에서는 이를 이용하고 있다. 하지만 제대로 하려면 dwFlags 값을 활용해야한다. ^ 플래그값 ^ 의미 ^ | INTERNET_CONNECTION_CONFIGURED | Local system has a valid connection to the Internet, but it might or might not be currently connected. | | INTERNET_CONNECTION_LAN | Local system uses a local area network to connect to the Internet. | | INTERNET_CONNECTION_MODEM | Local system uses a modem to connect to the Internet. | | INTERNET_CONNECTION_MODEM_BUSY | No longer used. | | INTERNET_CONNECTION_OFFLINE | Local system is in offline mode. | | INTERNET_CONNECTION_PROXY | Local system uses a proxy server to connect to the Internet. | | INTERNET_RAS_INSTALLED | Local system has RAS installed. | ====== FTP ====== 임의의 서버에 파일을 업로드하는 샘플 <code cpp> LPCSTR pHost = "some.where.ftp.listen"; LPCSTR pUsername = "tester"; LPCSTR pPassword = "*******"; LPCSTR pProxy = "ProxyServerName"; HINTERNET hInternet = ::InternetOpen( "Microsoft Internet Explorer", INTERNET_OPEN_TYPE_PROXY, pProxy, NULL, INTERNET_FLAG_ASYNC); HINTERNET hFTPSession = ::InternetConnect( hInternet, pHost, INTERNET_INVALID_PORT_NUMBER, pUsername, pPassword, INTERNET_SERVICE_FTP, 0, (DWORD)0); BOOL bSuccess = ::FtpPutFile( hFTPSession, "LocalName.dat", "RemoteName.dat", FTP_TRANSFER_TYPE_BINARY, 0); ::InternetCloseHandle(hFTPSession); ::InternetCloseHandle(hInternet); </code> ====== HTTP ====== http://www.somewhere.com/some_dir/somefile.html 파일 다운로드받기. <code cpp> HINTERNET hINet, hConnection, hData; CHAR buffer[2048] ; CString m_strContents ; DWORD dwRead, dwFlags, dwStatus ; hINet = InternetOpen( "InetURL/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (!hINet) { AfxMessageBox("InternetOpen Failed"); return; } try { hConnection = InternetConnect( hINet, "www.somewhere.com", 80, " "," ", INTERNET_SERVICE_HTTP, 0, 0); if (!hConnection) { InternetCloseHandle(hINet); return; } // Get data hData = HttpOpenRequest( hConnection, "GET", "/some_dir/somefile.html", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0); if (!hData) { InternetCloseHandle(hConnection); InternetCloseHandle(hINet); return; } HttpSendRequest(hData, NULL, 0, NULL, 0); while (InternetReadFile(hData, buffer, 255, &dwRead)) { if (dwRead == 0) return; buffer[dwRead] = 0; m_strContents += buffer; } } catch(CInternetException* e) { e->ReportError(); e->Delete(); } InternetCloseHandle(hConnection); InternetCloseHandle(hINet); InternetCloseHandle(hData); </code> 단순히 다운로드가 목적이라면, URLDownloadToFile 함수를 사용하는 것이 나을 듯 하다. 이에 관한 사항은 [[HttpGet]] 페이지를 참고. ====== 링크 ====== * [[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/portal.asp?frame=true | MSDN > Windows Internet]] * [[http://www.microsoft.com/mind/0396/wininet/wininet.asp | WinInet]] * [[http://www.microsoft.com/mind/0396/wininet/extensions.asp | Microsoft's Internet Extensions for Win32]] * [[http://blogs.technet.com/askperf/archive/2007/08/21/under-the-hood-wininet.aspx | Under the Hood: WinINet]]
kb/windowsinternetapi.txt
· 마지막으로 수정됨: 2014/11/09 21:14 (바깥 편집)
문서 도구
문서 보기
이전 판
백링크
맨 위로