公司安全部开发了新的加密模块,要求公司所有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真蛮好用!
网友评论