#pragma once #include <string> #include <WINDOWS.H> #include <winhttp.h> #include <vector> typedef struct _StParam_{ std::wstring wstrKey; std::wstring wstrValue; }StParam, *PStParam; typedef std::vector<StParam> VecStParam; typedef VecStParam::iterator VecStParamIter; typedef VecStParam::const_iterator VecStParamCIter; enum EType{ eGet, ePost, eUpload, }; class CHttpClientSyn { public: CHttpClientSyn(); ~CHttpClientSyn(void); CString m_strErrorDescriptor; public: BOOL TransmiteData(const std::wstring& wstrUrl, EType eType, DWORD dwTimeout); VOID ClearEvn(); BOOL ReceiveData(LPBYTE lpBuffer, DWORD& dwBufferSize); private: BOOL InitializeHttp(const std::wstring& wstrUrl, DWORD dwTimeout); VOID UninitializeHttp(); BOOL ReceiveData(); BOOL TransmiteData(EType eType); VOID ParseParams(const std::wstring& wstrExtraInfo); BOOL TransmiteDataToServerByGet(); BOOL TransmiteDataToServerByPost(); BOOL TransmiteDataToServerByUpload(); private: virtual DWORD GetDataSize() = 0; virtual BOOL GetData(LPVOID lpBuffer, DWORD dwBufferSize, DWORD& dwWrite); virtual BOOL ModifyRequestHeader(HINTERNET hRequest) = 0; virtual VOID AddExtInfo(VecStParam& VecExtInfo) = 0; virtual std::wstring GenerateExtInfo(const VecStParam& VecExtInfo) = 0; private: HINTERNET m_hSession; HINTERNET m_hConnect; HINTERNET m_hRequest; DWORD m_dwTimeout; LPBYTE m_lpReceiveData; DWORD m_dwReceiveDataLength; std::wstring m_wstrUrlPath; VecStParam m_VecExtInfo; };