/*//=============================================================== << HTTP CLIENT >> FILE : HTTPCLIENT.H, HTTPCLIENT.CPP DESC : WININET ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ HTTP CLIENT Ŭ·¡½º INIT BUILT DATE : 2006. 02. 20 LAST BUILT DATE : 2006. 02. 21 P.S.> - One-Request,One-Response / Keep-Alive ¹æ½ÄÀÇ ¿¬°á,¼Û¼ö½Å ¸ðµå Áö¿ø - One-Request,One-Response : ƯÁ¤ URLÀÇ HTTP ÀÚ¿øÀ» Çѹø¿¡ ¿äûÇÏ¿© ¹Þ´Â Çü½Ä (Open() ¡æ RecvResponse() ¡æ Close()) - Keep-Alive : ƯÁ¤ HTTP¼­¹ö¿¡ ÀÏ´Ü Á¢¼ÓÇÑ ÈÄ ¸Å¹ø ´Ù¸¥ ÀÚ¿øÀ» ¿äûÇÏ¿© ¹Þ´Â Çü½Ä (Open() ¡æ SendRequest() ¡æ RecvResponse() ¡æ Close()) Copyright¨Ï 2002~2007 B4nFter (b4nfter@gmail.com) and Co-Writers. All Rights Reserved. *///=============================================================== #pragma once /////////////////////////////////////////////////////////////////// // INCLUDE /////////////////////////////////////////////////////////////////// #include #include #include #pragma comment(lib, "WININET.LIB") /////////////////////////////////////////////////////////////////// // DEFINE /////////////////////////////////////////////////////////////////// #define DF_DEFAULT_HTTP_PORTNUMBER (80) /////////////////////////////////////////////////////////////////// // DECLARATION /////////////////////////////////////////////////////////////////// //*--------------------------------------------------------------- // TYPE : CLASS // NAME : CHttpClient //*--------------------------------------------------------------- // DESC : Http Client Ŭ·¡½º // PRGM : B4nFter //*--------------------------------------------------------------- class CHttpClient { public: enum EF_HTTP_CONNECTION_TYPE { EV_HTTP_CONNECTION_NONE = 0, // ÃʱⰪ EV_HTTP_CONNECTION_ONEREQONERSP = 1, // HTTP ¿¬°á¹æ½Ä : One-Req,One-Rsp EV_HTTP_CONNECTION_KEEPALIVE = 2, // HTTP ¿¬°á¹æ½Ä : Keep-Alive }; public: CHttpClient(); ~CHttpClient(); // One-Req,One-Rsp / Keep-Alive °ø¿ë ¸Þ¼­µå BOOL Open( LPCTSTR lpszHttpServerAddressUrl, // One-Req,One-Rsp : URL ÀÚ¿ø°æ·Î¸¸ »ç¿ë / Keep-Alive : ¼­¹öÁÖ¼Ò (URL, DOT-DECIMAL) EF_HTTP_CONNECTION_TYPE eHttpConnectionMode = EV_HTTP_CONNECTION_ONEREQONERSP, INTERNET_PORT wHttpServerPortNumber = DF_DEFAULT_HTTP_PORTNUMBER, // Keep-Alive ÀÏ °æ¿ì¸¸ »ç¿ë LPCTSTR lpszUserName = NULL, // Keep-Alive ÀÏ °æ¿ì¸¸ »ç¿ë LPCTSTR lpszPassword = NULL // Keep-Alive ÀÏ °æ¿ì¸¸ »ç¿ë ); VOID Close(); BOOL IsOpen(); INT RecvResponse(LPBYTE lpbtBuffer, INT nBufferSize); INT RecvDownFile(LPCTSTR lpszFileName, LPBINDSTATUSCALLBACK pCallBack); DWORD SetOption(DWORD dwMaxConnCount, DWORD dwTimout); // One-Req,One-Rsp Àü¿ë ¸Þ¼­µå // Keep-Alive Àü¿ë ¸Þ¼­µå BOOL ReOpen(); INT SendRequest(LPCTSTR lpszUrl, BOOL bCheckResultDataLength = FALSE, BOOL bAsyncRequest = FALSE); INT SendRequsetPostA(LPCTSTR lpszUrl, LPCSTR szPostData); //Ansi¿ë Post INT SendRequestGet(LPCTSTR lpszUrl); LONG m_RefCount; LONG IncRefCount() { return(InterlockedIncrement(&m_RefCount)); } LONG DecRefCount() { return(InterlockedDecrement(&m_RefCount)); } private: VOID Initialize(); VOID Finalize(); private: // One-Req,One-Rsp / Keep-Alive °ø¿ë ¸â¹öº¯¼ö HINTERNET m_hInternet; // InternetOpen() ÀÇ ÇÚµéÀ» °¡Áü HINTERNET m_hInternetConnection; // One-Req,One-Rsp : InternetOpenUrl() / Keep-Alive : InternetConnect() ÀÇ ÇÚµéÀ» °¡Áü HINTERNET m_hHttpRequest; // Keep-Alive ¹æ½Ä¿¡¼­¸¸ »ç¿ëµÊ EF_HTTP_CONNECTION_TYPE m_eHttpConnectionMode; // One-Req,One-Rsp Àü¿ë ¸â¹öº¯¼ö // Keep-Alive Àü¿ë ¸â¹öº¯¼ö TCHAR m_szHttpServerAddress[MAX_PATH]; INTERNET_PORT m_wHttpServerPortNumber; TCHAR m_szUserName[MAX_PATH]; TCHAR m_szPassword[MAX_PATH]; };