公司安全部開發了新的加密模塊,要求公司所有HTTP訪問接口均使用該加密模塊,手里一個app還使用明文訪問方式,所以,改吧。
app使用了AFNetworking訪問HTTP,并且很多模塊使用了該庫,加密方法也不相同,所以,不能修改庫源碼添加加密代碼。研究了一下,發現也很簡單,只需要設置一下,就OK了,上代碼:
_afManager = [AFHTTPSessionManager manager];
_afManager.operationQueue.maxConcurrentOperationCount = 100;
// 這里要使用AFHTTPRequestSerializer,如果使用AFJSONRequestSerializer,則不會調用下面設置的block。
_afManager.requestSerializer = [AFHTTPRequestSerializer serializer];
[_afManager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
_afManager.requestSerializer.timeoutInterval = 20;//設置請求超時時間
[_afManager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
[_afManager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
// 這里設置的block,會被調用,在block里面加密即可
[_afManager.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id _Nonnull parameters, NSError * _Nullable __autoreleasing * _Nullable error) {
NSString *willEncodeStr = [YHLUtil getJsonWithNSDictionary:parameters];
// 這里添加加密的代碼
// 返回已加密的字符串
return didEncodeStr;
}];
這樣設置之后,加密的block就會在創建Request的時候被調用,AFNetworking真蠻好用!