developer
2023-05-20 e12c7b4c22df631ebdcd16b2f98fbef8f738f92f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
//    '########'########::'######:'########:'##:::'##:
//    ... ##..::##.... ##'##... ##:##.... ##:##::'##::
//    ::: ##::::##:::: ##:##:::..::##:::: ##:##:'##:::
//    ::: ##::::########:. ######::##:::: ##:#####::::
//    ::: ##::::##.... ##:..... ##:##:::: ##:##. ##:::
//    ::: ##::::##:::: ##'##::: ##:##:::: ##:##:. ##::
//    ::: ##::::########:. ######::########::##::. ##:
//    :::..::::........:::......::........::..::::..::
//
//  Created by 亿刀 on 13-1-28.
//  Copyright (c) 2013年 Taobao. All rights reserved.
//
 
#import <Foundation/Foundation.h>
#import <MtopSDK/TBSDKMTOPEnvConfig.h>
/*!
 * System parameters
 */
#define SYS_PARAMETER_API_NAME          @"api"
#define SYS_PARAMETER_API_VERSOIN       @"v"
#define SYS_PARAMETER_SECURITY_APPKEY   @"security_appkey"
#define SYS_PARAMETER_APPKEY            @"appkey"
#define SYS_PARAMETER_SID               @"sid"
#define SYS_PARAMETER_TTID              @"ttid"
#define SYS_PARAMETER_TIMESTAMP         @"timestamp"
#define SYS_PARAMETER_DEVID             @"devid"
#define SYS_PARAMETER_LOCATION          @"location"
 
 
/**
 * 系统http headers
 */
#define SYS_HTTP_HEADER_PV                      @"x-pv"
#define SYS_HTTP_HEADER_APPKEY                  @"x-appkey"
#define SYS_HTTP_HEADER_SID                     @"x-sid"
#define SYS_HTTP_HEADER_UID                     @"x-uid"
#define SYS_HTTP_HEADER_TTID                    @"x-ttid"
#define SYS_HTTP_HEADER_TIMESTAMP               @"x-t"
#define SYS_HTTP_HEADER_DEVID                   @"x-devid"
#define SYS_HTTP_HEADER_LOCATION                @"x-location"
#define SYS_HTTP_HEADER_SIGN                    @"x-sign"
#define SYS_HTTP_HEADER_UTDID                   @"x-utdid"
#define SYS_HTTP_HEADER_REQBIZ                  @"x-reqbiz-ext"
#define SYS_HTTP_HEADER_APP_VER                 @"x-app-ver"
#define SYS_HTTP_HEADER_MINI_WUA                @"x-mini-wua"
#define SYS_HTTP_HEADER_WUAT                    @"x-wuat"
#define SYS_HTTP_HEADER_FEATURES                @"x-features"
#define SYS_HTTP_HEADER_PAGEURL                 @"x-page-url"
#define SYS_HTTP_HEADER_PAGENAME                @"x-page-name"
 
 
/**
 * 开放体系头
 */
#define SYS_HTTP_HEADER_MINI_APPKEY             @"x-mini-appkey"
#define SYS_HTTP_HEADER_REQ_APPKEY              @"x-req-appkey"
#define SYS_HTTP_HEADER_OPEN_BIZ_CODE           @"x-open-biz"
#define SYS_HTTP_HEADER_OPEN_BIZ_DATA           @"x-open-biz-data"
 
 
/**
 * open api ext params,sdk use‘s property
 */
#define SYS_HTTP_HEADER_EXTDATA                 @"x-extdata"
#define SYS_HTTP_HEADER_EXTTYPE                 @"x-exttype"
#define SYS_HTTP_HEADER_SECURITY_APPKEY         @"x-s-appkey"
#define SYS_HTTP_HEADER_ACT                     @"x-act"
#define SYS_HTTP_HEADER_ROUTER_ID               @"x-router-id"
#define SYS_HTTP_HEADER_PLACE_ID                @"x-place-id"
 
/**
 * security guard headers
 */
#define SYS_HTTP_HEADER_SIGNTYPE                @"x-sign-type"
#define SYS_HTTP_HEADER_UMT                     @"x-umt"
#define SYS_HTTP_HEADER_SGEXT                   @"x-sgext"
#define SYS_HTTP_HEADER_BAXIA_VERSION           @"x-bx-version"
 
#define CUSTOM_HTTP_UTDID             @"custom-utdid"
/**
 * 协议版本
 */
#define M_PV_INNER                              @"6.2"
#define M_PV_OPEN                               @"1.3"
#define M_PV_INNER_OLD                          @"5.2"
 
#define SYS_PARAMETER_DATA @"data"
 
@protocol TBSDKConnectionProtocol;
 
typedef enum _TBSDKRequestErrorType
{
    TBSDKRequestErrorTypeConnectionFailure = 1, //网络连接失败或者无网络
    TBSDKRequestErrorTypeTimedOut = 2,          //网络连接超时
    TBSDKRequestErrorTypeUserInvalid = 3,       // user sid invalid time
    TBSDKREquestTooMuchRedirectionErrorType,
} TBSDKRequestErrorType;
 
typedef NS_ENUM(NSInteger,TBMtopUnitStrategy){
    TBMtopUnitStrategyGuideUnit = 1,
    TBMtopUnitStrategyTradeUnit
};
 
@protocol TBSDKRequestDataSource;
@protocol TBSDKRequestDelegate;
@protocol TBSDKRequestProgressProtocol;
 
//! 网络请求默认超时时间
#define TIME_OUT_SCONDS 10.
 
@class TBSDKConnection;
 
 
/** TBSDK的真正的网络请求类
 *
 *  此类主要做联网控制,如超时时间、最大联网个数、取消所有网络连接等。
 *  TBSDK的真正的网络请求类,此类通过delegate来获取网络请求
 *  的配置参数(get或post,post的value,需要上传的数据)。
 *
 */
@interface TBSDKRequest : NSObject
 
@property (nonatomic, strong) NSError                                           *error;
//! 代理对象
@property (nonatomic, weak) id<TBSDKRequestDelegate>                            delegate;
 
//! 代理对象
@property (nonatomic, weak) id<TBSDKRequestDataSource>                          dataSource;
 
//! 上传下载进度代理对象
@property (nonatomic, weak) id<TBSDKRequestProgressProtocol>                    requestProgressDelegate;
 
@property (nonatomic, strong, readonly) TBSDKConnection                         *request;
 
// api request url
@property (nonatomic, strong) NSURL                                             *url;
 
// api single request custom host
@property (nonatomic, strong) NSString*                                         customHost;
// 请求级别设置线上、预发、日常 custom host (按顺序设置线上、预发、日常域名)
@property (nonatomic, strong) NSArray *customHostList;
 
//! 请求过期时间,默认10s
@property (nonatomic, assign) NSTimeInterval                         timeOutSeconds;
 
//! NSData 对象的请求响应数据
@property (nonatomic, strong) NSData                                            *responseData;
 
//! NSString 对象的请求响应数据
@property (nonatomic, strong) NSString                                          *responseString;
 
//! http responseStatusCode
@property (nonatomic, assign) int                                    responseStatusCode;
 
@property (nonatomic, strong, readonly) NSDictionary                            *responseHeaders;
 
@property (nonatomic, strong) NSDictionary                                      *requestHeaders;
 
//! 默认关闭
@property (nonatomic, assign) BOOL                                   useHTTPCache;
 
@property (nonatomic, assign) BOOL                                   forceRefresh;
 
@property (nonatomic, strong) NSString                                          *apiMethod;
 
@property (nonatomic)                    BOOL                                   isAvalancheCache;
 
// post method of body gzip size
@property (nonatomic, assign) int                                    gzipLimitedSize;
 
@property (nonatomic, strong) NSArray                                           *blackCacheKeyParam;
 
@property (nonatomic, strong) NSMutableDictionary                               *networkDataSet;
@property (nonatomic) CFAbsoluteTime                                            operationQueueTime;
@property (nonatomic) CFAbsoluteTime                                            networkFinishedTime;
 
 
// base property
@property(strong, nonatomic) NSString* userId;                                  // app user's id
@property(strong, nonatomic) NSString* apiName;                                 // 网关URL
@property(strong, nonatomic) NSString* apiVersion;                              // 网关URL
 
@property(strong, nonatomic) NSMutableDictionary* protocolParameters;           // 协议参数
@property(strong, nonatomic) NSMutableDictionary* httpHeaders;                  // http请求头
@property(strong, nonatomic) NSMutableDictionary* extParameters;                // 扩展参数 (和data参数平级)
@property(strong, nonatomic) NSMutableDictionary* bizParameters;                // 业务参数
@property(strong, nonatomic) NSMutableDictionary* priorityData;                 // 排队SDK优先级参数
@property(strong, nonatomic) NSMutableDictionary* custhomHeaders;               // 自定义不进行urlencode的http请求头
 
 
@property(strong,nonatomic) NSMutableArray* uploadFiles;
 
 
@property(assign, nonatomic) BOOL isUseHttps;                                   // 是否启用https
@property(assign, nonatomic) BOOL isUseHttpPost;                                // 是否使用http post
@property(strong, nonatomic) NSString* unitPrefix;                              // 单元化前缀
@property(assign, nonatomic) MtopType type;                                     // 实例类型
@property(strong, nonatomic) NSString   *instanceID;                            // 实例ID
 
@property(strong, nonatomic) id context;                                        // 调用方可以使用的上下文
@property(assign, nonatomic) BOOL isEnableWua;                                  // 是否启用wua
@property(assign, nonatomic) int  wuaFlag;                                      // 启用wua类型标识
@property(assign, nonatomic) BOOL priorityFlag;                                 // API请求优先级flag(针对排队SDK)
@property(assign, nonatomic) TBMtopUnitStrategy  UnitStrategy;                  // 设置请求级别单元化域名策略
@property(assign, nonatomic) BOOL unHostedByNetWork;                            // 是否不要被网络库接管 默认 NO
@property(strong, nonatomic) NSError *rawError;                                 // 底层回调原始error(errorCode为网络库返回原始值)
 
 
/*!
 * 创建一个MtopRequest
 * @param apiName           API名称
 * @param apiVersion        API版本
 * @return
 *                      MtopRequest
 */
- (TBSDKRequest*) initWithApiName: (NSString*) apiName apiVersion: (NSString*) apiVersion;
 
/*!
 * 添加一个http请求头
 * @param value     HTTP头value
 * @param key       HTTP头key
 */
- (void) addHttpHeader: (NSString*) value forKey: (NSString*) key;
 
/*!
 * 添加一个http请求头 (不做UrlEncode)
 * @param value   HTTP头value
 * @param key     HTTP头key
 */
- (void) addCustomHttpHeader:(NSString *)value forKey:(NSString *)key;
 
/*!
 * 添加一个协议参数
 * @param value     参数值
 * @param key       参数名
 */
- (void) addProtocolParameter: (NSString*) value forKey: (NSString*) key;
 
/*!
 * 添加一个扩展参数和data参数平级
 * @param value     参数值
 * @param key       参数名
 */
- (void) addExtParameter: (id) value forKey: (NSString*) key;
 
/*!
 * 移除一个扩展参数
 * @param key
 */
- (void) removeExtParameter:(NSString*) key;
 
/*!
 * 添加一个业务参数(业务级别参数)
 * @param value     参数值
 * @param key       参数名
 */
- (void) addBizParameter: (id) value forKey: (NSString*) key;
 
/*!
 * 移除一个业务参数
 * @param key
 */
- (void) removeBizParameter:(NSString*) key;
 
/**
 * 设置API请求优先级参数
 *
 * @param value    参数值
 * @param key      参数名
 */
- (void) addPriorityData:(id) value forKey:(NSString*) key;
 
/*!
 * 添加要上传的文件
 * @param data          文件数据
 * @param fileName      本地文件名(全路径)
 * @param forKey        form field 的 key
 *
 */
- (void) addUploadFileWithData: (NSData*) data fileName: (NSString*) fileName forKey: (NSString*) key;
 
 
//! 取消TBSDK中的所有的网络连接
+ (void)cancelTBSDKAllRequest;
 
//! 开始同步网络请求, 当网络请求完成或失败后返回
- (BOOL)startSynchronous;
 
//! 开始异步请求
- (void)startAsynchronous;
 
//! 退出网路请求,并把delegate设置为空
- (void)cancelRequest;
 
/*!
 * 重置
 */
- (void) reset;
 
@end