这个封装类包含了GET请求,POST请求,上传图片,上传多张图片,下载图片,判断网络是否可用等功能。
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#import <Foundation/Foundation.h>
@interface HttpUtil : NSObject
typedef NS_ENUM(NSInteger, NetworkReachabilityStatus) { NetworkReachabilityStatusUnknown = -1, NetworkReachabilityStatusNotReachable = 0, NetworkReachabilityStatusReachableViaWWAN = 1, NetworkReachabilityStatusReachableViaWiFi = 2,
};
// GET请求
+ (void)getWithURLString:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(id))success
failure:(void (^)(NSError * error))failure;
// POST请求
+ (void)postWithURLString:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(id))success
failure:(void (^)(NSError *))failure;
// 上传图片
+ (void)uploadWithURLString:(NSString *)URLString
parameters:(id)parameters
uploadData:(NSData *)uploadData
uploadName:(NSString *)uploadName
success:(void (^)())success
failure:(void (^)(NSError *))failure;
// 上传多张图片
+ (void)uploadMostImageWithURLString:(NSString *)URLString
parameters:(id)parameters
uploadDatas:(NSArray *)uploadDatas
uploadName:(NSString *)uploadName
success:(void (^)())success
failure:(void (^)(NSError *))failure;
+(void)DownLoadWithUrlString:(NSString *)URLString
parameters:(id)parameters
progress:(void (^)(id))progress
success:(void(^)(NSURL *filePath))success;
+(void)setReachabilityStatusChangeBlock:(void(^)(NetworkReachabilityStatus status))block;
+(void)stopMonitoring;
+(Boolean)JudgeNetisConnect;
@end
|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
#import "HttpUtil.h"
#import "AFNetworking.h"
@implementation HttpUtil
#pragma mark -- GET请求 --
+ (void)getWithURLString:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(id))success
failure:(void (^)(NSError * error))failure {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 10;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (responseObject) {
success(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (error) {
failure(error);
}
}];
}
#pragma mark -- POST请求 --
+ (void)postWithURLString:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(id))success
failure:(void (^)(NSError *))failure {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithArray:@[@"POST", @"GET", @"HEAD"]];
manager.requestSerializer.timeoutInterval = 10;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (success) {
success(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
#pragma mark -- 上传图片 --
+ (void)uploadWithURLString:(NSString *)URLString
parameters:(id)parameters
uploadData:(NSData *)uploadData
uploadName:(NSString *)uploadName
success:(void (^)())success
failure:(void (^)(NSError *))failure {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id< AFMultipartFormData > _Nonnull formData) {
[formData appendPartWithFileData:uploadData name:uploadName fileName:uploadName mimeType:@"image/png"];
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (success) {
success(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
// 上传多张图片 uploadDatas 图片的data集合
// uploadName 文件名称 最好以xxx1 xxx2 表示 image1 image2
+ (void)uploadMostImageWithURLString:(NSString *)URLString
parameters:(id)parameters
uploadDatas:(NSArray *)uploadDatas
uploadName:(NSString *)uploadName
success:(void (^)())success
failure:(void (^)(NSError *))failure{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id< AFMultipartFormData > _Nonnull formData) {
for (int i=0; uploadDatas.count; i++) {
NSString *imageName = [NSString stringWithFormat:@"%@[%i]", uploadName, i];
[formData appendPartWithFileData:uploadDatas[i] name:uploadName fileName:imageName mimeType:@"image/png"];
}
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (success) {
success(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
+(void)DownLoadWithUrlString:(NSString *)URLString
parameters:(id)parameters
progress:(void (^)(id))progress
success:(void(^)(NSURL *filePath))success
{
//1.创建管理者对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
URLString=[self DownLoadUrlWithParams:URLString WithNSDictionaryParams:parameters];
NSLog(@"DownLoadFileUrl %@",URLString);
NSURL *url = [NSURL URLWithString:URLString];
//3.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//下载任务
NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
if (progress) {
progress(downloadProgress);
}
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
// //下载地址
// //设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
filePath=[filePath stringByAppendingPathComponent:@"DFU.zip"];
return [NSURL fileURLWithPath:filePath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
if (success) {
success(filePath);
}
}];
//开始启动任务
[task resume];
}
//因为下载的方法不能够直接填写dict参数进去,所以只有使用这种方法拼接参数进去
+(NSString *)DownLoadUrlWithParams:(NSString*)url WithNSDictionaryParams:(NSDictionary *)params{
// 初始化参数变量
NSString *body=@"";
// 快速遍历参数数组
NSString* appendUrl;
for(id key in params) {
NSLog(@"key :%@ value :%@", key, [params objectForKey:key]);
body = [body stringByAppendingString:key];
body = [body stringByAppendingString:@"="];
body = [body stringByAppendingString:[params objectForKey:key]];
body = [body stringByAppendingString:@"&"];
}
// 处理多余的&以及返回含参url
if (body.length > 1) {
// 去掉末尾的&
body = [body substringToIndex:body.length - 1];
// 返回含参url
}
appendUrl=[url stringByAppendingString:body];
return appendUrl;
}
+(void)setReachabilityStatusChangeBlock:(void(^)(NetworkReachabilityStatus status))block{ //监测网络状态
AFNetworkReachabilityManager *netMan = [AFNetworkReachabilityManager sharedManager];
[netMan setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
// 未知网络
case AFNetworkReachabilityStatusUnknown:
if (block) {
block(NetworkReachabilityStatusUnknown);
}
break;
// 没有网络
case AFNetworkReachabilityStatusNotReachable:
if (block) {
block(NetworkReachabilityStatusNotReachable);
}
break;
// 手机自带网络
case AFNetworkReachabilityStatusReachableViaWWAN:
if (block) {
block(NetworkReachabilityStatusReachableViaWWAN); }
break;
// WIFI
case AFNetworkReachabilityStatusReachableViaWiFi:
if (block) {
block(NetworkReachabilityStatusReachableViaWiFi); }
break;
}
}];
[netMan startMonitoring];}
+(void)stopMonitoring{
AFNetworkReachabilityManager *netMan = [AFNetworkReachabilityManager sharedManager];
[netMan stopMonitoring];
}
+(Boolean)JudgeNetisConnect{
NSString *urlstr=WuCheBaseUrl;
NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:urlstr]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:5.0];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if (response!=NULL) {
return YES;
}
return NO;
}
@end
|
以上这篇iOS AFNetworking各种功能封装类代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/z979451341/article/details/78757878








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。