企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 网络请求 ### 简介 天马SDK基于AFNetworking封装了一套基础网络请求工具类,其中除了处理基本的网络请求以外,为了网络请求的安全性,还处理了https、加密等功能。开发者在进行组件开发时,可以基于我们提供的工具类进行开发,如需自定义,则需满足我们的开发规范要求。 ### 使用方法: 1.天马工厂框架添加了加密请求头,如果对加密请求头没有特殊要求,可以直接使用下列第一二种方法,进行网络请求,否则请使用第三四种进行加密请求头配置: ``` #import <TMSDK/TMBaseNetworking.h> /** post请求 @param urlString 请求地址 @param paraments 请求参数 @param successBlock 成功回调 @param failureBlock 失败回调 @return 请求工具类 */ +(TMBaseNetworking *)tm_postWithUrlString:(NSString *)urlString withParaments:(nullable id)paraments withSuccessBlock:( TMRequestSuccessBlock)successBlock withFailureBlock:( TMRequestFailureBlock)failureBlock; /** get请求 @param urlString 请求地址 @param paraments 请求参数 @param successBlock 成功回调 @param failureBlock 失败回调 @return 请求工具类 */ +(TMBaseNetworking *)tm_getWithUrlString:(NSString *)urlString withParaments:(nullable id)paraments withSuccessBlock:( TMRequestSuccessBlock)successBlock withFailureBlock:( TMRequestFailureBlock)failureBlock; /** post请求 @param urlString 请求地址 @param paraments 请求参数 @param encryptionTool 加密工具,其中涉及加密参数及加密请求头。如果没有特殊需求请传入空,工具类会按照默认处理。 @param successBlock 成功回调 @param failureBlock 失败回调 @return 请求工具类 */ +(TMBaseNetworking *)tm_postWithUrlString:(NSString *)urlString withParaments:(nullable id)paraments encryptionTool:(nullable TMEncryptionTool *)encryptionTool withSuccessBlock:( TMRequestSuccessBlock)successBlock withFailureBlock:( TMRequestFailureBlock)failureBlock; /** get请求 @param urlString 请求地址 @param paraments 请求参数 @param encryptionTool 加密工具,其中涉及加密参数及加密请求头。如果没有特殊需求请传入空,工具类会按照默认处理。 @param successBlock 成功回调 @param failureBlock 失败回调 @return 请求工具类 */ +(TMBaseNetworking *)tm_getWithUrlString:(NSString *)urlString withParaments:(nullable id)paraments encryptionTool:(nullable TMEncryptionTool *)encryptionTool withSuccessBlock:( TMRequestSuccessBlock)successBlock withFailureBlock:( TMRequestFailureBlock)failureBlock; /** 批量上传图片 @param images 成功回调 @param success 失败回调 @param failed 请求工具类 */ + (void)tm_uploadImageWithImages:(NSArray *)images success:(void(^)(NSArray *imageUrls))success failed:(TMRequestFailureBlock)failed; /** 批量上传视频文件 @param videos 成功回调 @param success 失败回调 @param failed 请求工具类 */ + (void)tm_uploadVideoWithVideos:(NSArray *)videos success:(void(^)(NSArray *videoUrls))success failed:(TMRequestFailureBlock)failed; ``` 例如用户可以像下面这样直接发起网络请求: ``` [TMBaseNetworking tm_getWithUrlString:@"/Member/Article/getAboutUsArticle.html" withParaments:nil withSuccessBlock:^(id _Nonnull data, TMEncryptionTool * _Nonnull encryptionTool) { NSLog(@"网络请求成功:%@", [data valueForKey:@"data"]); } withFailureBlock:^(NSString * _Nonnull error, id _Nonnull data) { NSLog(@"网络请求失败:%@", error); }]; ``` 2.如果开发者有自己的网络请求设置,可以初始化TMBaseNetworking对象,并配置相应的请求参数后发起网络请求,如:请求方法、参数、序列化、请求头等配置 ``` #import <TMSDK/TMBaseNetworking.h> TMBaseNetworking *baseNetworking = [[TMBaseNetworking alloc] init]; baseNetworking.requestMethod = TMRequestMethodGET; baseNetworking.requestURLPath = @"/Member/Article/getAboutUsArticle.html"; baseNetworking.requestTimeoutInterval = 5.0f; [baseNetworking startCompletionBlockWithSuccess:^(id _Nonnull data, TMEncryptionTool * _Nonnull encryptionTool) { NSLog(@"网络请求成功:%@", [data valueForKey:@"data"]); } failure:^(NSString * _Nonnull error, id _Nonnull data) { NSLog(@"网络请求失败:%@", error); }]; [baseNetworking startRequest]; ``` 3.天马SDK的网络请求工具类提供了和后台对应的加解密方法,如果开发者需要对自己的某些参数进行加解密,可以调用天马工场的方法进行加解密,需要注意的是,客户端的加密需要调用后端解密方法解密,后端的加密需要调用客户端解密方法进行解密: ``` TMEncryptionTool *tool = [[TMEncryptionTool alloc] init]; NSString *content = @"1234567890qwertyuiop"; NSString *encryptionContent = [tool tm_encryptionWithContent:content]; //NSString *decryptionContent = [tool tm_decryptionWithContent:content]; NSLog(@"待加密内容:%@", content); NSLog(@"加密后内容:%@", encryptionContent); //NSLog(@"解密后内容:%@", decryptionContent); ``` 4.如果以上不满足业务需求,需要自定义网络请求,则需要满足下列网络请求规范: 1).兼容https和http:我们提供了TMCertificateConfig配置文件来表示是否启用https以及相关情况,开发者需要依据TMCertificateConfig配置文件做相应处理。 ``` #import <TMSDK/TMCertificateConfig.h> /** 证书相关配置信息: 1.如果是开启了https,则只支持双向认证。 2.在进行网络请求时:是否针对服务端进行域名和无效证书验证可以通过“validatesDomainName”和“allowInvalidCertificates”进行配置;在进行客户端证书校验时,可以通过“certificateData”和“certificatePassword”获取证书数据及密码 */ @interface TMCertificateConfig : NSObject /** 是否是https请求 */ @property (nonatomic, assign, readonly) BOOL isHttpsRequest; /** https证书类型, 暂时只支持AFSSLPinningModeNone这一种类型,是否验证域名和是否允许无效证书,请通过下列对应属性获取 */ **@property (nonatomic, assign, readonly) AFSSLPinningMode pinningMode; /** https证书数据 */ @property (nonatomic, strong, readonly) id certificateData; /** https证书密码 */ @property (nonatomic, strong, readonly) NSString *certificatePassword; /** 是否允许无效证书 */ @property (nonatomic, assign, readonly) BOOL allowInvalidCertificates; /** 是否需要验证域名 */ @property (nonatomic, assign, readonly) BOOL validatesDomainName; + (TMCertificateConfig *)instance; @end ``` 2).添加加密头文件到网络请求头中:我们提供了TMEncryptionTool工具类,主要是用来提供加密头,以及根据业务需求对关键字段进行加解密 ``` #import <TMSDK/TMEncryptionTool.h> @interface TMEncryptionTool : NSObject /** 是否加密头文件,默认为YES,如无特殊需求,不建议修改 */ @property (nonatomic, assign) BOOL isEncryptionHead; /** 加密头文件 */ @property (nonatomic, strong, readonly) NSDictionary<NSString *, NSString *> * encryptHeader; /** 生成加密请求头 该加密请求头会用在请求头里和加解密,如无特殊需求,不必调用该方法 @param isEncryption 请求头是否加解密,如果没有特殊需求,请传入YES */ - (void)tm_generateGloadHeaderWithIsEncryption:(BOOL)isEncryption; /** 利用加密头文件进行加密 @param content 需要加密的内容 @return 返回加密后的内容,如果返回nil表示加密失败 */ - (NSString *)tm_encryptionWithContent:(NSString *)content; /** 利用加密头文件进行解密 @param content 需要解密的内容 @return 返回解密后的内容,如果返回nil表示解密失败 */ - (NSString *)tm_decryptionWithContent:(NSString *)content; @end ``` 5. 如果使用TMViewController 打开h5页面,则不需要关心证书这一块,如果是自定义webview打开h5,则需要处理证书这一块。 6. 天马已经在SDK中针对SDWebImage框架做了处理,可以正常加载图片,如果使用其他库或者其他方法加载网络图片,则需要自己处理 备注:具体的相关使用方法,可以见demo。