BBASMNetworkUtilProtocol.h
5.88 KB
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
//
// BBASMNetworkUtilProtocol.h
// BBAMNP
//
// Created by baidu on 2019/3/31.
// Copyright © 2019 Baidu. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <Pyramid/Pyramid.h>
#import "BBASMCommonRequestInfo.h"
#define BBASMC_RequestDataType @"dataType"
NS_ASSUME_NONNULL_BEGIN
AliasService(BBASMNetworkUtilProtocol, bba_MNPNetworkUtil)
extern NSString *const BBASMCUIDRequestConfuseKey; //CUID请求键名
extern NSString *const BBASMUUIDRequestConfuseKey; //UUID请求键名
typedef NS_ENUM(NSUInteger, MNPNetwork) {
MNPNetworkRequest = 1, ///< type is 'request'
MNPNetworkUploadFile, ///< type is 'uploadFile'
MNPNetworkDownloadFile, ///< type is 'downloadFile'
MNPNetworkSocket, ///< type is 'socket: connect'
};
typedef NS_ENUM(NSUInteger, BBASMRefererCarrier) {
BBASMRefererInNativeRequest, // including request, download, upload.
BBASMRefererInSlaveWebView,
BBASMRefererInVideoRequest,
BBASMRefererInAudioRequest,
BBASMRefererInPreviewImage,
BBASMRefererInCoverImage
};
// 请求完成回调,服务端返回数据为responseJson,其他response信息在request中获取
typedef void(^BBASMRequestComplete)(BBANormalAPIRequest * _Nullable request, id responseJson);
// 请求失败回调,错误信息为error,其他response信息在request中获取
typedef void(^_Nullable BBASMRequestFail)(BBANormalAPIRequest * _Nullable request, NSError *error);
@protocol BBASMNetworkUtilProtocol <NSObject>
@optional
/// https校验
+ (BOOL)checkHTTPSscheme:(NSString *)appId url:(NSString *)url;
/// 百度域名校验
+ (BOOL)checkBaiduHost:(NSString *)appId url:(NSString *)url;
/// request白名单校验
+ (BOOL)isHttpsHostValidWithAppID:(NSString *)appID
url:(NSString *)url;
/// 白名单校验
+ (BOOL)isHttpsHostValidWithAppID:(NSString *)appID
url:(NSString *)url
networkType:(MNPNetwork)networkType;
/// 插件域名白名单校验
+ (BOOL)isPluginDomainValidWithAppID:(NSString *)appID
pluginID:(NSString *)pluginID
url:(NSString *)url
networkType:(MNPNetwork)networkType;
/// 域名白名单校验,包括包域名和插件域名
+ (BOOL)checkDomainWithAPPID:(NSString *)appId
params:(NSDictionary *)params
networkType:(MNPNetwork)networkType;
/**
* @brief 校验域名白名单,包括包域名和插件域名
*
* @param appId xcx id
* @param pluginId 插件
* @param url 请求
* @param networkType 网络类型
* @return NO 校验不通过
*/
+ (BOOL)checkDomainWithAPPID:(NSString *)appId
pluginId:(NSString *)pluginId
url:(NSString *)url
networkType:(MNPNetwork)networkType;
/**
* @brief 处理请求响应数据
* @param apiRequest request请求对象
* @param dataType 数据类型
* @param responseType 响应数据类型
* @param jsonResponse 获取Server返回的json结果
* @return 格式化后的响应数据
*/
+ (NSString *)parseResponseData:(BBABaseAPIRequest *)apiRequest
dataType:(NSString *)dataType
responseType:(NSString *)responseType
intermedateJsonResponse:(NSObject * _Nullable * _Nullable)jsonResponse;
/// js异常写入追踪反馈
+ (void)jsExceptionStr:(NSString *)expStr;
/// 本地缓存request
+ (NSString *)addTask:(id)fileRequest
forApp:(NSString*)appID;
/**
* @brief 创建request请求
*
* @param appID appID
* @param handleSystemCookies 是否携带系统cookie
* @param handleMNPCookies 是否携带小程序cookie框架内的cookie(小程序cookie框架与系统cookie隔离,当前只有swan.request使用小程序cookie框架)
* @param optionsDict request请求参数字典
* @param successBlock 成功block
* @param failBlock 失败block
* @return apirequest
*/
+ (BBANormalAPIRequest *)requestWithAppID:(NSString *)appID
handleSystemCookies:(BOOL)handleSystemCookies
handleMNPCookies:(BOOL)handleMNPCookies
OptionsDict:(NSDictionary *)optionsDict
successBlock:(APIRequestCompletionBlock)successBlock
failure:(APIRequestFailureBlock)failBlock;
/**
根据reqInfo直接发起请求
@param reqInfo 包含请求地址url、
参数params、
headers(User-Agent、content-type、charset)、
cookies(requestCookies)等
@param completionBlock 请求完成回调
@param failureBlock 请求失败回调
*/
+ (void)requestWithInfo:(BBASMCommonRequestInfo *)reqInfo
completion:(BBASMRequestComplete)completionBlock
failure:(BBASMRequestFail)failureBlock;
/**
* @brief 根据AppId获取referer
*
* @param appId 应用ID
* @param from referer是哪里需要添加的
* @return referer
*/
+ (nullable NSString *)httpRefererWithAppId:(NSString *)appId from:(BBASMRefererCarrier)from;
/**
* @brief 将APPID拼接到UA里
*
* @param userAgent 原来的UA
* @param appID 小程序ID
* @return UA
*/
+ (nullable NSString *)newUserAgentWithOld:(NSString *)userAgent appID:(NSString *)appID;
/**
* @brief 从UA中获取appID
*
* @param userAgent UA
* @return AppID
*/
+ (nullable NSString *)getAppIDFromUserAgent:(NSString *)userAgent;
/**
* @brief 获取小程序框架统一UA (小程序UA + baseUA)
*
* @return 小程序框架统一UA
*/
+ (NSString *)getWebviewAppUserAgent;
/// @brief pms请求的公参
/// @return pms请求的公参
+ (NSDictionary *)requestPublicParameters;
/// @brief 发起经过加密的请求
/// @param originRequest 原始Request
/// @param bFromsmRequest 是否来自request端能力
+ (void)cryptoStartWith:(BBANormalAPIRequest *)originRequest isFromsmRequest:(BOOL)bFromsmRequest;
@end
NS_ASSUME_NONNULL_END