对AF进行网络请求的封装,可以只要导入参数就可以请求网络
网络请求的四步骤:
a、构建url
b、构造request
c、构造连接操作对象
d、设置返回数据解析方式
1、创建DataService 继承NSobject
导入AFNetworking框架
DataService.h文件
+(void)requestURL:(NSString*)urlStr httpMethod:(NSString*)method params:(NSMutableDictionary*)params compeltionHandle:(void(^)(id result))block;
DataService.m文件
以微博为例
#define BASE_URL @"https://open.weibo.cn/2/"
+(void)requestURL:(NSString *)urlStr httpMethod:(NSString *)method params:(NSMutableDictionary *)params compeltionHandle:(void (^)(id))block{
//构建url
urlStr = [BASE_URL stringByAppendingString:urlStr];
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]init];
if ([method isEqualToString:@"GET"]) {
[manager GET:urlStr parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
block(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"错误");
}];
}else if([method isEqualToString:@"POST"]){
BOOL isfile = NO;
for (NSString *key in params) {
id value = params[key];
if ([value isKindOfClass:[NSData class]]) {
isfile = YES;
break;
}
}
if (!isfile) {
//普通文件
[manager POST:urlStr parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
block(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"错误");
}];
}else{
//图片文件
[manager POST:@"https://upload.api.weibo.com/2/statuses/upload.json" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
for (NSString *key in params) {
id value = params[key];
if ([value isKindOfClass:[NSData class]]) {
[formData appendPartWithFileData:value
name:key
fileName:key
mimeType:@"image/jpeg"];}
}
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
block(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"错误");
}];
}
}
//解析数据
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingMutableContainers];
}