之前没啥代码经验,每个接口的请求都还需要重新初始化请求对象,感觉太low了,现在抽空把网络请求封装了一下,优化下代码
首先建个类里面用来封装网络请求的方法,然后在控制器里面来请求接口的参数,然后把请求成功的数据在返回到控制器里面,进而解析数据
例:Networkconnect
在Network connect.h
@interface Networkconnect : NSObject
typedef void (^resultBlock)(id responseObject);//返回数据
+(AFHTTPSessionManager*)getSession;
//网络请求
+(void)requestWithApi:(id)Api Params:(id)Params type:(NSString *)type withBlock:(resultBlock)block;
@end
在Network connect.m
#import "Networkconnect.h"
@implementation Networkconnect
+(AFHTTPSessionManager*)getSession{
//网络请求初始化
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
[sessionManager.securityPolicy setAllowInvalidCertificates:YES];
sessionManager.requestSerializer.timeoutInterval = 10.f;//改成10s
sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];//回复序列化
sessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
// sessionManager.requestSerializer.stringEncoding = NSUTF8StringEncoding;
sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",@"image/jpeg",@"image/png",@"application/octet-stream",@"text/json",@"text/javascript",nil];
return sessionManager;
}
#pragma mark - 网络请求
+(void)requestWithApi:(id)Api Params:(id)Params type:(NSString *)type withBlock:(resultBlock)block {
//接口
NSString *hostUrl = [NSString stringWithFormat:@"%@",Api];
if ([type isEqualToString:@"GET"]) {
NSString *params = @"";
for (id obj in Params) {
if (params.length==0) {
params = [NSString stringWithFormat:@"%@=%@",obj,Params[obj]];
}else{
params = [NSString stringWithFormat:@"%@&%@=%@",params,obj,Params[obj]];
}
}NSString *getStr = [NSString stringWithFormat:@"%@?%@",hostUrl,params];
NSLog(@"getParams->%@",getStr);
[[Networkconnect getSession] GET:getStr parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"responseObject->%@",responseObject);
block(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error:%@",error);
}];
}else{
NSLog(@"postParams->%@",Params);
[[Networkconnect getSession] POST:hostUrl parameters:Params progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"responseObject->%@",responseObject);
block(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error->%@",error);
}];
}
}
@end
下面就是控制器里面要做的事了,调用方法传参数,以及数据的解析,在这里就不多说了
网友评论