AFN的基本使用在此就不在多说了,先上代码,我自己对AFN的二次封装,只考虑了对http请求的封装, 后面我会写一篇文章专门对webservice的soap封装,
//
// JKAFNetTool.h
// JKqyApp
//
// Created by dllo on 15/12/15.
// Copyright © 2015年 dllo. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSUInteger, JKresponseStyle) {
JKJSON,
JKXMl,
JkDATA,
};
typedef NS_ENUM(NSUInteger, JKrequestStyle) {
JKrequestJSON,
JKrequestString,
};
@interface JKAFNetTool : NSObject
/**
* Post请求
*
* @param url 请求网址
* @param body body体
* @param requestStyle 请求数据类型
* @param headFile 请求头
* @param responseStyle 返回数据类型
* @param success 请求成功回调
* @param failure 请求失败回调
*/
+ (void)PostNetWithURL:(NSString *)url
body:(id)body
bodyStyle:(JKrequestStyle)requestStyle
headFile:(NSDictionary *)headFile
responseStyle:(JKresponseStyle)responseStyle
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure;
/**
* get请求
*
* @param url 请求网址
* @param body body体
* @param headFile 请求头
* @param responseStyle 返回数据类型
* @param success 请求成功回调
* @param failure 请求失败回调
*/
+ (void)getNetWithURL:(NSString *)url body:(id)body headFile:(NSDictionary *)headFile responseStyle:(JKresponseStyle)responseStyle success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure;
@end
//
// JKAFNetTool.m
// JKqyApp
//
// Created by dllo on 15/12/15.
// Copyright © 2015年 dllo. All rights reserved.
//
#import "JKAFNetTool.h"
#import "AFNetworking.h"
@implementation JKAFNetTool
+ (void)getNetWithURL:(NSString *)url
body:(id)body
headFile:(NSDictionary *)headFile
responseStyle:(JKresponseStyle)responseStyle
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
{
//1, 创建网络管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2, 请求头的添加
if (headFile) {
for (NSString *key in headFile.allKeys) {
[manager.requestSerializer setValue:headFile[key] forHTTPHeaderField:key];
}
}
//3, 返回数据的类型
switch (responseStyle) {
case JKJSON:
manager.responseSerializer = [AFJSONResponseSerializer serializer];
break;
case JKXMl:
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
break;
case JkDATA:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
break;
default:
break;
}
//4. 响应返回数据类型
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", @"application/javascript",@"application/x-javascript",@"image/jpeg", nil]];
//5. 转码
url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
//6. 发送请求
[manager GET:url parameters:body success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSString *path = [NSString stringWithFormat:@"%ld.plist", [url hash]];
// 存储的沙盒路径
NSString *path_doc = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
// 归档
[NSKeyedArchiver archiveRootObject:responseObject toFile:[path_doc stringByAppendingPathComponent:path]];
if (responseObject) {
success(task,responseObject);
}
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
// 缓存的文件夹
NSString *path = [NSString stringWithFormat:@"%ld.plist", [url hash]];
NSString *path_doc = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
// 反归档
id result = [NSKeyedUnarchiver unarchiveObjectWithFile:[path_doc stringByAppendingPathComponent:path]];
if (result) {
success(task, result);
// failure(task, error);
// NSLog(@"%@", error);
} else {
failure(task, error);
}
}];
}
+ (void)PostNetWithURL:(NSString *)url
body:(id)body
bodyStyle:(JKrequestStyle)requestStyle
headFile:(NSDictionary *)headFile
responseStyle:(JKresponseStyle)responseStyle
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
{
//1, 创建网络管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2 .body的类型
switch (requestStyle) {
case JKrequestJSON:
manager.requestSerializer = [AFJSONRequestSerializer serializer];
break;
case JKrequestString:
[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id _Nonnull parameters, NSError * _Nullable * _Nullable error) {
return parameters;
}];
break;
default:
break;
}
//3, 请求头的添加
if (headFile) {
for (NSString *key in headFile.allKeys) {
[manager.requestSerializer setValue:headFile[key] forHTTPHeaderField:key];
}
}
//4, 返回数据的类型
switch (responseStyle) {
case JKJSON:
manager.responseSerializer = [AFJSONResponseSerializer serializer];
break;
case JKXMl:
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
break;
case JkDATA:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
break;
default:
break;
}
//5. 响应返回数据类型
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", @"application/javascript",@"application/x-javascript",@"image/jpeg", nil]];
//6. 转码
url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
//7. 发送请求
[manager POST:url parameters:body success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
if (requestStyle) {
success(task,responseObject);
}
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
if (error) {
failure (task,error);
NSLog(@"%@",error);
}
}];
}
写的不好,大家看看就行
@end