一直想把自己封装的网络处理请求改一下,今天终于动手写了写,刚开始因为自己真的不想在外部处理参数,所以一直没用单例,但是今天仔细想了想,貌似没办法绕开外部处理参数与单例之间矛盾的问题,因为项目当中将其处理为单例比较容易处理一些问题,也没想出什么好办法,只能退而求其次先在外部处理参数吧,如果有好的建议欢迎大家提出。这就把下午修改完成的网络请求代码共享给大家,因为基于AFNetworking,所以比较简单,相当于对其的再封装吧,如果有新项目直接导入这俩文件然后基本够用。
//
// APISDK.h
// smallMovie
//
// Created by 程磊 on 15/8/14.
// Copyright (c) 2015年 Jueying. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AFNetWorking.h"
typedef enum {
get = 1,
post = 2,
}reqMethod;
typedef void(^RequestFinished)(id responseObject);
typedef void(^RequestFailed)(NSInteger errorCode);
@interface APISDK : NSObject
/**
* 下载管理者
*/
@property (nonatomic, strong) AFHTTPSessionManager *sessionManager;
/**
* 网络请求管理
*/
@property (nonatomic, strong) AFHTTPRequestOperationManager *manager;
/**
* 获取单例
*
*/
+ (instancetype)getSingleClass;
/**
* 发送请求
*
* @param method post还是get
* @param finished 请求成功结果
* @param failed 请求失败描述
*/
- (AFHTTPRequestOperation *)sendDataWithUrlString:(NSString *)urlString ParamDictionary:(NSDictionary *)param requestMethod:(reqMethod)method finished:(RequestFinished)finished failed:(RequestFailed)failed;
/**
* 取消请求
*/
- (void)CloseAndClearRequest;
///**
// * 添加post参数
// *
// * @param value 值
// * @param key 键
// */
//- (void)addValue:(id)value forKey:(NSString *)key;
/**
* 下载
*
* @param param 参数
* @param method get Or post
* @param finished 请求完成
* @param failed 请求失败
*/
- (NSURLSessionTask *)downDataWithUrlString:(NSString *)urlString ParamDictionary:(NSDictionary *)param requestMethod:(reqMethod)method finished:(RequestFinished)finished failed:(RequestFailed)failed;
@end
//
// APISDK.m
// smallMoview
//
// Created by 程磊 on 15/8/14.
// Copyright (c) 2015年 Jueying. All rights reserved.
//
#import "APISDK.h"
#import "objc/runtime.h"
#define TIME_OUT 20
//static char getParamDic;
@interface APISDK()
@end
@implementation APISDK
- (id)init{
self = [super init];
if (self) {
_manager = [AFHTTPRequestOperationManager manager];
_manager.requestSerializer.timeoutInterval = 15.0;
_manager.requestSerializer.HTTPShouldUsePipelining = YES;
_manager.requestSerializer.HTTPShouldHandleCookies = YES;
_manager.responseSerializer = [AFHTTPResponseSerializer serializer];
_sessionManager = [AFHTTPSessionManager manager];
_sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
}
return self;
}
+ (instancetype)getSingleClass{
static APISDK *apisdk = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
apisdk = self.new;
});
return apisdk;
}
- (AFHTTPRequestOperation *)sendDataWithUrlString:(NSString *)urlString ParamDictionary:(NSDictionary *)param requestMethod:(reqMethod)method finished:(RequestFinished)finished failed:(RequestFailed)failed{
NSParameterAssert(urlString);
AFHTTPRequestOperation * operation;
if (method == post) {
operation = [_manager POST:urlString parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
finished(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failed(error.code);
NSLog(@"%@", error);
}];
} else {
operation = [_manager GET:urlString parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
finished(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failed(error.code);
NSLog(@"%@", error);
}];
}
return operation;
}
//下载
- (NSURLSessionTask *)downDataWithUrlString:(NSString *)urlString ParamDictionary:(NSDictionary *)param requestMethod:(reqMethod)method finished:(RequestFinished)finished failed:(RequestFailed)failed{
NSParameterAssert(urlString);
NSURLSessionTask *task;
if (method == post) {
task = [_sessionManager POST:urlString parameters:param success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
finished(responseObject);
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
failed(error.code);
}];
} else {
task = [_sessionManager GET:urlString parameters:param success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
finished(responseObject);
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
failed(error.code);
}];
}
return task;
}
- (void)CloseAndClearRequest{
[[AFHTTPRequestOperationManager manager].operationQueue cancelAllOperations];
}
//
//- (void)addValue:(id)value forKey:(NSString *)key{
// if (value) {
// NSMutableDictionary *requestDic = [self requestParamDictionary];
// [requestDic setObject:value forKey:key];
// }
//}
//
//- (NSMutableDictionary *)requestParamDictionary{
// NSMutableDictionary *paramDictionary = objc_getAssociatedObject(self, &getParamDic);
// if (paramDictionary) {
// return paramDictionary;
// }
// paramDictionary = [NSMutableDictionary dictionary];
// objc_setAssociatedObject(self, &getParamDic, paramDictionary, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
// return paramDictionary;
//}
//- (NSMutableURLRequest *)makePostRequest:(NSString *)url {
// NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
// request.HTTPMethod = @"POST";
// request.timeoutInterval = TIME_OUT;
// return request;
//}
//
//- (NSMutableURLRequest *)makeGetRequest:(NSString *)url {
// NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
// request.HTTPMethod = @"GET";
// request.timeoutInterval = TIME_OUT;
// return request;
//}
//
//- (NSData *)makeHTTPbodyFromObject:(id)object {
// NSCAssert([NSJSONSerialization isValidJSONObject:object], @"这不是Json类型");
// return [NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:nil];
//}
@end