사용자 도구

사이트 도구


kb:windowsinternetapi

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

kb:windowsinternetapi [2014/11/09 21:14] (현재)
줄 1: 줄 1:
 +====== 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 (바깥 편집)