AFN使用

  1. 要使用常规的AFN网络访问 
  2.   
  3.  1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
  4.   
  5.     所有的网络请求,均有manager发起 
  6.   
  7.  2. 需要注意的是,默认提交请求的数据是二进制的,返回格式是JSON 
  8.   
  9.     1> 如果提交数据是JSON的,需要将请求格式设置为AFJSONRequestSerializer 
  10.     2> 如果返回格式不是JSON的, 
  11.   
  12.  3. 请求格式 
  13.   
  14.      AFHTTPRequestSerializer            二进制格式 
  15.      AFJSONRequestSerializer            JSON 
  16.      AFPropertyListRequestSerializer    PList(是一种特殊的XML,解析起来相对容易) 
  17.   
  18.  4. 返回格式 
  19.   
  20.      AFHTTPResponseSerializer           二进制格式 
  21.      AFJSONResponseSerializer           JSON 
  22.      AFXMLParserResponseSerializer      XML,只能返回XMLParser,还需要自己通过代理方法解析 
  23.      AFXMLDocumentResponseSerializer (Mac OS X) 
  24.      AFPropertyListResponseSerializer   PList 
  25.      AFImageResponseSerializer          Image 
  26.      AFCompoundResponseSerializer       组合 
  27.  */  


AFNetworking Architecture(架构)

NSURLConnection

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

NSURLSession (iOS 7 / Mac OS X 10.9)

  • AFURLSessionManager
  • AFHTTPSessionManager

Serialization

  • <AFURLRequestSerialization>
    • AFHTTPRequestSerializer
    • AFJSONRequestSerializer
    • AFPropertyListRequestSerializer
  • <AFURLResponseSerialization>
    • AFHTTPResponseSerializer
    • AFJSONResponseSerializer
    • AFXMLParserResponseSerializer
    • AFXMLDocumentResponseSerializer (Mac OS X)
    • AFPropertyListResponseSerializer
    • AFImageResponseSerializer
    • AFCompoundResponseSerializer


Additional Functionality

  • AFSecurityPolicy
  • AFNetworkReachabilityManager

各个类的简单说明及用法:

1. AFHTTPRequestOperationManager

封装与Web应用程序通过HTTP交互,包括请求的创建,响应序列化,网络可达性监控和安全,以及请求操作管理的常见沟通模式。


GET请求:

1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
2 [manager GET:@"http://example.com/resources.json" 
3       parameters:nil 
4       success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } 
5       failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];

 附带表单编码的POST请求

复制代码
1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
2 NSDictionary *parameters = @{@"foo": @"bar"}; 
3 [manager POST:@"http://example.com/resources.json" 
        parameters:parameters 
        success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } 
        failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];
复制代码

 POST MULTI-PART REQUEST(复杂的POST请求,如上传)

复制代码
1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
2 NSDictionary *parameters = @{@"foo": @"bar"}; 
3 NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];//上传的图片 
4 [manager POST:@"http://example.com/resources.json" 
       parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileURL:filePath name:@"image" error:nil]; } 
       success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Success: %@", responseObject); } 
       failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];

2. AFURLSessionManager

创建了并管理基于一个指定的NSURLSessionConfiguration对象的NSURLSession对象,它与以下协议配合使用(<NSURLSessionTaskDelegate>,<NSURLSessionDataDelegate>, <NSURLSessionDownloadDelegate>,<NSURLSessionDelegate>)

创建一个下载任务

复制代码
1 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
2 AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 
3 NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL];  NSURLSessionDownloadTask *downloadTask = 
    [manager downloadTaskWithRequest:request 
4                   progress:nil 
5                 destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) 
                          { NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; 
6     return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]]; } 
7     completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { NSLog(@"File downloaded to: %@", filePath); }]; 
8 [downloadTask resume];


创建一个上传任务

复制代码
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 
NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; 
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error: %@", error); } else { NSLog(@"Success: %@ %@", response, responseObject); } }]; 
[uploadTask resume];

为一个复杂请求(MULTI-PART REQUEST)创建上传任务,并附带进度条

复制代码
1 NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://ex  ample.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileURL  :[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil]; }   error:nil];
2 AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessio  nConfiguration]]; 
3 NSProgress *progress = nil; 
4 NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLR  esponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error: %@", error); } else {         NSLog(@"%@ %@"  , response, responseObject); } }]; 
5 [uploadTask resume];

创建一个数据任务(Data Task)

复制代码
1 NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
2 AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 
3 NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; 
4 NSURLRequest *request = [NSURLRequest requestWithURL:URL]; //上传数据的任务 
5 NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error: %@", error); } else { NSLog(@"%@ %@", response, responseObject); } }]; 
6 [dataTask resume];

3. 请求序列化

请求序列化器会根据提供的URL strings和请求参数pramaters去创建相应的查询请求或HTTP body(请求体),如:

复制代码
 1 NSString *URLString = @"http://example.com";
 2 NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};
 3 //查询GET“请求编码” 
 4 [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil]; 
 5 // GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3 
 6 //查询POST表单提交请求编码 
 7 [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; 
 8 /* POST http://example.com/ Content-Type: application/x-www-form-urlencoded foo=bar&baz[]=1&baz[]=2&baz[]=3 */ 
 9 //查询JSON格式请求编码 
10 [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; 
11 /* POST http://example.com/ Content-Type: application/json {"foo": "bar", "baz": [1,2,3]} */
复制代码

4. AFNetworkReachabilityManager(网络监测管理器)

监测域名以及IP地址的畅通性,对于WWAN以及WiFi的网络接口都管用。单例形式检测网络畅通性
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); }];

使用HTTP管理网络畅通性(如果提供了一个基本的URL地址,那个基本URL网址的畅通性就会被仔细的监测着)
复制代码
 1 NSURL *baseURL = [NSURL URLWithString:@"http://example.com/"]; 
 2 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; 
 3 NSOperationQueue *operationQueue = manager.operationQueue; 
 4 [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
 5 switch (status) { 
 6 case AFNetworkReachabilityStatusReachableViaWWAN: 
 7 case AFNetworkReachabilityStatusReachableViaWiFi: 
 8 [operationQueue setSuspended:NO]; 
 9 break; 
10 case AFNetworkReachabilityStatusNotReachable: 
11 default: 
12 [operationQueue setSuspended:YES];
13  break; } 
14 }];
复制代码
 5. AFSecurityPolicy(安全策略)应用程序在处理敏感的客户数据或财务信息时,强烈建议路使用有效的SSL HTTPS连接。允许无效的SSL证书
1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
2 manager.securityPolicy.allowInvalidCertificates = YES; 
3 // not recommended for production
 6. AFHTTPRequestOperation继承自AFURLConnectionOperation,使用HTTP以及HTTPS协议来处理网络请求。它封装成了状态码+内容类型,可用来判断请求成功或失败。尽管AFHTTPRequestOperationManager 目前是最好的用来处理网络请求的方式,但AFHTTPRequestOperation 也有它自己的用武之地。GET请求
复制代码
1 NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"]; 
2 NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 
3 AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
4 op.responseSerializer = [AFJSONResponseSerializer serializer];//提交JSON格式数据 
5 [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } 
6   failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 
7 [[NSOperationQueue mainQueue] addOperation:op];
复制代码
 批量操作(请求)
复制代码
 1 NSMutableArray *mutableOperations = [NSMutableArray array]; 
 2 for (NSURL *fileURL in filesToUpload) { 
 3 NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.  com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileURL:fileU  RL name:@"images[]" error:nil]; }]; 
 4 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
 5 [mutableOperations addObject:operation]; 
 6 } 
 7 NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:@[...] 
 8 progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { NSLog(@"%lu of %lu complete", numbe  rOfFinishedOperations, totalNumberOfOperations); } completionBlock:^(NSArray *operations) { NSLog(@"All operations in batch comp  lete"); 
 9 }]; 
10 [[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO];
复制代码


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值