soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SHttpClient-i.h
1/*****************************************************************
2 *HTTP处理类,主要用于HTTP GET/POST、下载(支持重定向)功能
3 *Author: JelinYao
4 *Date: 2015/2/14 12:11
5 *Email: mailto://jelinyao@163.com
6 */
7/*****************************************************************
8 */
9#ifndef __SHTTPCLIENT_I__H__
10#define __SHTTPCLIENT_I__H__
11#include <interface/obj-ref-i.h>
12#include <interface/sstring-i.h>
13#include <stdint.h>
14
15SNSBEGIN
16
17typedef enum RequestType
18{
19 Hr_Post,
20 Hr_Get,
21} RequestType;
22
23// 枚举下载状态
24typedef enum DownloadState
25{
26 DS_Start = 0,
27 DS_Loading,
28 DS_Finished,
29 DS_Failed,
30} DownloadState;
31
32/******************************************************
33 * 定义错误信息
34 ******************************************************/
35typedef enum HttpError
36{
37 Hir_Success = 0, // 成功
38 Hir_InitErr, // 初始化失败
39 Hir_ConnectErr, // 连接HTTP服务器失败
40 Hir_SendErr, // 发送请求失败
41 Hir_QueryErr, // 查询HTTP请求头失败
42 Hir_404, // 页面不存在
43 Hir_IllegalUrl, // 无效的URL
44 Hir_CreateFileErr, // 创建文件失败
45 Hir_DownloadErr, // 下载失败
46 Hir_QueryIPErr, // 获取域名对应的地址失败
47 Hir_SocketErr, // 套接字错误
48 Hir_UserCancel, // 用户取消下载
49 Hir_BufferErr, // 文件太大,缓冲区不足
50 Hir_HeaderErr, // HTTP请求头错误
51 Hir_ParamErr, // 参数错误,空指针,空字符……
52 Hir_UnknowErr, // 未知错误
53} HttpError;
54
55#undef INTERFACE
56#define INTERFACE IHttpCallback
57DECLARE_INTERFACE_(IHttpCallback, IObjRef)
58{
59 /**
60 * @brief 增加引用计数
61 * @return long - 新引用计数
62 */
63 STDMETHOD_(long, AddRef)(THIS) PURE;
64
65 /**
66 * @brief 减少引用计数
67 * @return long - 新引用计数
68 */
69 STDMETHOD_(long, Release)(THIS) PURE;
70
71 /**
72 * @brief 释放对象
73 * @return void
74 */
75 STDMETHOD_(void, OnFinalRelease)(THIS) PURE;
76
77 /**
78 * @brief 下载回调
79 * @param state - 下载状态
80 * @param nTotalSize - 总大小
81 * @param nLoadSize - 已下载大小
82 * @return BOOL - 成功返回TRUE,失败返回FALSE
83 */
84 STDMETHOD_(BOOL, OnDownloadCallback)(THIS_ DownloadState state, uint64_t nTotalSize, uint64_t nLoadSize) PURE;
85};
86
87#undef INTERFACE
88#define INTERFACE IHttpClient
89DECLARE_INTERFACE_(IHttpClient, IObjRef)
90{
91 /**
92 * @brief 增加引用计数
93 * @return long - 新引用计数
94 */
95 STDMETHOD_(long, AddRef)(THIS) PURE;
96
97 /**
98 * @brief 减少引用计数
99 * @return long - 新引用计数
100 */
101 STDMETHOD_(long, Release)(THIS) PURE;
102
103 /**
104 * @brief 释放对象
105 * @return void
106 */
107 STDMETHOD_(void, OnFinalRelease)(THIS) PURE;
108
109 /**
110 * @brief 设置HTTP请求头
111 * @param pszKey - 请求头键
112 * @param pszValue - 请求头值
113 * @return void
114 */
115 STDMETHOD_(void, SetHeader)(THIS_ LPCSTR pszKey, LPCSTR pszValue) PURE;
116
117 /**
118 * @brief 设置下载回调
119 * @param pCallback - 回调指针
120 * @return void
121 */
122 STDMETHOD_(void, SetDownloadCallback)(THIS_ IHttpCallback * pCallback) PURE;
123
124 /**
125 * @brief 下载文件
126 * @param lpUrl - 文件URL
127 * @param lpFilePath - 文件保存路径
128 * @return BOOL - 成功返回TRUE,失败返回FALSE
129 */
130 STDMETHOD_(BOOL, DownloadFile)(THIS_ LPCSTR lpUrl, LPCSTR lpFilePath) PURE;
131
132 /**
133 * @brief 获取错误代码
134 * @return HttpError - 错误代码
135 */
136 STDMETHOD_(HttpError, GetErrorCode)(CTHIS) SCONST PURE;
137
138 /**
139 * @brief 发送HTTP请求
140 * @param result - 返回结果
141 * @param lpUrl - 请求URL
142 * @param type - 请求类型(GET或POST)
143 * @param lpPostData - POST数据
144 * @param lpHeader - 请求头
145 * @return BOOL - 成功返回TRUE,失败返回FALSE
146 */
147 STDMETHOD_(BOOL, Request)(THIS_ IStringA * result, LPCSTR lpUrl, RequestType type, LPCSTR lpPostData DEF_VAL(NULL), LPCSTR lpHeader DEF_VAL(NULL)) PURE;
148
149 /**
150 * @brief 发送HTTP请求
151 * @param out - 返回结果
152 * @param lpUrl - 请求URL
153 * @param type - 请求类型(GET或POST)
154 * @param lpPostData - POST数据
155 * @param dwDataLen - POST数据长度
156 * @param lpHeader - 请求头
157 * @return BOOL - 成功返回TRUE,失败返回FALSE
158 */
159 STDMETHOD_(BOOL, Request2)(THIS_ IStringA * out, LPCSTR lpUrl, RequestType type, LPVOID lpPostData, DWORD dwDataLen, LPCSTR lpHeader DEF_VAL(NULL)) PURE;
160
161 /**
162 * @brief 设置超时时间
163 * @param dwConnectTime - 连接超时时间
164 * @param dwSendTime - 发送超时时间
165 * @param dwRecvTime - 接收超时时间
166 * @return void
167 */
168 STDMETHOD_(void, SetTimeOut)(THIS_ int dwConnectTime, int dwSendTime, int dwRecvTime) PURE;
169
170 /**
171 * @brief 获取HTTP状态码
172 * @return int - HTTP状态码
173 */
174 STDMETHOD_(int, GetHttpCode)(CTHIS) SCONST PURE;
175};
176
177SNSEND
178
179#endif // __SHTTPCLIENT_I__H__
Interface for reference counting.
Definition obj-ref-i.h:19