HttpClt.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:4k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #pragma once
  2. #include <afxinet.h>
  3. #define ERR_TEAR_CANCEL 101
  4. #define ERR_TEAR_URLFORMAT 102
  5. #define ERR_TEAR_REDIRECT 103
  6. #define ERR_TEAR_INTERRUPTED 104
  7. #define ERR_TEAR_DATATRANSFER 105
  8. /***
  9. Http连接异常
  10. */
  11. class CTearException : public CException
  12. {
  13. DECLARE_DYNCREATE(CTearException)
  14. public:
  15. CTearException(int nCode = 0);
  16. ~CTearException() { }
  17. public:
  18. int m_nErrorCode;
  19. public:
  20. virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError, PUINT pnHelpContext = NULL);
  21. };
  22. #define ERR_HTTP_TEARSESSION 201
  23. /***
  24. Http客户端,下载Http服务器上的文件
  25. */
  26. class STKNET_API CHttpClient : public Object
  27. {
  28. public:
  29. CHttpClient();
  30. virtual ~CHttpClient();
  31. protected:
  32. CString m_strServer;
  33. INTERNET_PORT m_nPort;
  34. int m_nAccessType;
  35. int m_nProxyType;
  36. CString m_strProxyAddress;
  37. UINT m_nProxyPort;
  38. CString m_strProxyUser;
  39. CString m_strProxyPasswd;
  40. CString m_strRegCode;
  41. CString m_strUserName;
  42. CString m_strPasswd;
  43. CString m_strCookie;
  44. BOOL m_bIsLogin;
  45. CString m_strLastErrorMessage;
  46. public:
  47. // Attributes
  48. BOOL SetServer(LPCTSTR lpszServer, INTERNET_PORT port = INTERNET_DEFAULT_HTTP_PORT); // 设置服务器
  49. BOOL SetAccessType(int nAccessType, int nProxyType, LPCTSTR lpszProxyAddress, UINT nProxyPort,
  50. LPCTSTR lpszProxyUser, LPCTSTR lpszProxyPasswd); // 设置代理
  51. // operation do not need log in
  52. DWORD WGet(LPCTSTR lpszURL, CString &strResult, PROGRESS_CALLBACK fnCallback, void *cookie); // 直接下载文件,返回至strResult
  53. DWORD WGet(LPCTSTR lpszURL, CFile *pFile, PROGRESS_CALLBACK fnCallback, void *cookie); // 直接下载文件,写入文件
  54. DWORD WGet(LPCTSTR lpszRegCode, LPCTSTR lpszUserName, LPCTSTR lpszPasswd, LPCTSTR lpszVersion,
  55. CString &strResult, int nWantLen);
  56. // Operations
  57. BOOL Login(LPCTSTR lpszRegCode, LPCTSTR lpszUserName, LPCTSTR lpszPasswd, LPCTSTR lpszVersion); // 登陆网站
  58. BOOL Logout(); // 退出登陆
  59. BOOL LoadServerInfo(CString &strResult, PROGRESS_CALLBACK fnCallback, void *cookie); // 下载服务器信息
  60. BOOL LoadPackageInfo(CString &strResult, PROGRESS_CALLBACK fnCallback, void *cookie); // 下载数据包信息
  61. BOOL LoadPackage(LPCTSTR lpszURL, CFile * pFile, PROGRESS_CALLBACK fnCallback, void *cookie); // 下载数据包
  62. virtual BOOL GetLastErrorMessage(LPTSTR lpszError, UINT nMaxError);
  63. protected:
  64. DWORD RequestGet(LPCTSTR lpszURL, CMapStringToString * pmapParam,
  65. CFile * pFileSave, PROGRESS_CALLBACK fnCallback, void *cookie);
  66. DWORD RequestGet(LPCTSTR lpszURL, CMapStringToString * pmapParam,
  67. CString*pstrResult, PROGRESS_CALLBACK fnCallback, void *cookie);
  68. DWORD RequestPost(LPCTSTR lpszURL, CMapStringToString* pmapParam,
  69.  CFile * pFileSave, PROGRESS_CALLBACK fnCallback, void *cookie);
  70. DWORD RequestPost(LPCTSTR lpszURL, CMapStringToString* pmapParam,
  71. CString*pstrResult, PROGRESS_CALLBACK fnCallback, void *cookie);
  72. DWORD Request( LPCTSTR lpszURL, CString &strPostData,
  73. CFile *pFileSave, CString*pstrResult,
  74. PROGRESS_CALLBACK fnCallback, void *cookie);
  75. protected:
  76. static BOOL EscapeString(LPCTSTR lpszValue, CString& strOut);
  77. static BOOL MakeHttpHeader(CMapStringToString& map, CString& out);
  78. static BOOL MakePostData(CMapStringToString &__map, CString &__strOut);
  79. static BOOL MakeGetData(CMapStringToString &__map, CString &__strOut);
  80. static BOOL _MakeHttpData(CMapStringToString &__map, CString &__strOut, LPCTSTR __lpszSep);
  81. static BOOL PostDataEncoding(CString &strPostData);
  82. static BOOL PostDataDecoding(CString &strPostData);
  83. void DoOpenURL(LPCTSTR lpszURL, DWORD dwHttpRequestFlags,
  84. CString &strHeader, CString &strPostData,
  85. CInternetSession *pSession,
  86. CHttpConnection **ppServer, CHttpFile **ppFile,
  87. PROGRESS_CALLBACK fnCallback, void *cookie);
  88. void DoSecurityRequest(CHttpFile * pFile, CString &strPostDat);
  89. CString GetNewLocation(CHttpFile * pFile);
  90. };