AFN
- 全称是AFNetworking,是对NSURLConnection的一层封装
虽然运行效率没有ASI高,但是使用比ASI简单 在iOS开发中,使用比较广泛
AFN的github地址 https://github.com/pokeb/AFNetworking/AFNetworking
AFN的版本选择
AFHTTPSessionManager
AFN中最重要的对象之一
- 封装了HTTP请求的常见处理
- GET\POST请求
解析服务器的响应数据
创建
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
GET\POST请求
- GET请求
- (NSURLSessionDataTask *)GET:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
- 使用
/**
* 第1种发送get请求方法
* AFHTTPSessionManager底层对NSURLSession进行了包装
*/
NSString *string = @"http://181.24.986.115:34812/login";
AFHTTPSessionManager *manger = [AFHTTPSessionManager manager];
NSDictionary *parmae = @{
@"username" : @"wzy",
@"pwd" : @"wzy"
};
[manger GET:string parameters:parmae success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"%@",responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@",error);
}];
/**
* 第2种发送get请求方法
*/
NSString *string = @"http://120.25.226.186:32812/login";
AFHTTPRequestOperationManager *manger = [AFHTTPRequestOperationManager manager];
NSDictionary *parmae = @{
@"username" : @"520it",
@"pwd" : @"520it"
};
[manger GET:string parameters:parmae success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error);
}];
- POST请求
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
文件上传
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
/**
* 文件上传
*/
- (void)upload
{
NSString *string = @"http://120.25.226.186:32812/upload";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager POST:string parameters:@{@"username" : @"520it"} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// 第一种
// 这个name不能乱写,只能写@"file"
// [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/apple/Desktop/Temp/Waiting/placeholder.png"] name:@"file" error:nil];
// 第二种
// [formData appendPartWithFileData:[NSData dataWithContentsOfFile:@"/Users/apple/Desktop/Temp/Waiting/placeholder.png"] name:@"file" fileName:@"placeholder.png" mimeType:@"image/png"];
// 第三种
[formData appendPartWithFileURL:[NSURL URLWithString:@"/Users/apple/Desktop/Temp/Waiting/placeholder.png"] name:@"file" fileName:@"place" mimeType:@"image/png" error:nil];
} success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"%@",responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@",error);
}];
}
让服务器返回XML数据
/**
* 让服务器返回XML数据
*/
- (void)programReturnXML
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 直接使用服务器返回的数据
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// [AFJSONResponseSerializer serializer]; // 解析服务器返回的JSON数据
// [AFXMLParserResponseSerializer serializer]; // 解析服务器返回的XML数据
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
NSDictionary *params = @{
@"username" : @"520it",
@"pwd" : @"520it",
@"type" : @"XML"
};
[manager GET:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, NSXMLParser *parser) {
NSLog(@"%@",parser);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@",error);
}];
}
监控联网状态
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager startMonitoring];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%d", status);
}];
提示:要监控网络连接状态,必须要先调用单例的startMonitoring方法
- 监视网络状态
/**
* AFNetworkReachabilityStatusUnknown = -1,// 网络错误
* AFNetworkReachabilityStatusNotReachable = 0,
* AFNetworkReachabilityStatusReachableViaWWAN = 1,
* AFNetworkReachabilityStatusReachableViaWiFi = 2,
*/
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%zd",status);
}];
[manager startMonitoring];
- 监听网络改变
/**
* 监听网络状态的改变
*/
- (void)monitorNetWorkStatusChange
{
/*
* NSString *kReachabilityChangedNotification = @"kNetworkReachabilityChangedNotification";
* 网络状态的改变
*/
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetWorkStatus) name:kReachabilityChangedNotification object:nil];
NSLog(@"monitorNetWorkStatusChange");
self.reachability = [Reachability reachabilityForInternetConnection];
[self.reachability startNotifier];
}
/**
* 当控制器挂了,就停止监听,并清空reachability内存
*/
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self.reachability stopNotifier];
self.reachability = nil;
}
/**
* 获得网络状态
*/
- (void)getNetWorkStatus
{
if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
NSLog(@"WIFI");
}else if([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable)
{
NSLog(@"data");
}else
{
NSLog(@"network wrong");
}
}
ASI和AFN架构对比