AFNetwork 作用和用法详解

AFNetworking是一个轻量级的iOS网络通信类库 。它 建立在NSURLConnection和NSOperation等类库 的基础上,让很多网络通信功能的实现变得十分简单。它支持HTTP请求和基于REST的网络服务(包括GET、POST、 PUT、DELETE等)。支持ARC。

//
//  MJViewController.m
//  03.AFN演练
//
//  Created by apple on 14-4-30.
// Copyright (c) 2014年 itcast. All rights reserved. // #import "MJViewController.h" #import "AFNetworking.h" @interface MJViewController () @end @implementation MJViewController /** 要使用常规的AFN网络访问 1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  所有的网络请求,均有manager发起 2. 需要注意的是,默认提交请求的数据是二进制的,返回格式是JSON  1> 如果提交数据是JSON的,需要将请求格式设置为AFJSONRequestSerializer  2> 如果返回格式不是JSON的, 3. 请求格式  AFHTTPRequestSerializer 二进制格式  AFJSONRequestSerializer JSON  AFPropertyListRequestSerializer PList(是一种特殊的XML,解析起来相对容易) 4. 返回格式  AFHTTPResponseSerializer 二进制格式  AFJSONResponseSerializer JSON  AFXMLParserResponseSerializer XML,只能返回XMLParser,还需要自己通过代理方法解析  AFXMLDocumentResponseSerializer (Mac OS X)  AFPropertyListResponseSerializer PList  AFImageResponseSerializer Image  AFCompoundResponseSerializer 组合 */ - (void)viewDidLoad {  [super viewDidLoad];   [self reach]; } #pragma mark - 演练 #pragma mark - 检测网络连接 - (void)reach {  /**  AFNetworkReachabilityStatusUnknown = -1, // 未知  AFNetworkReachabilityStatusNotReachable = 0, // 无连接  AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3G 花钱  AFNetworkReachabilityStatusReachableViaWiFi = 2, // 局域网络,不花钱  */  // 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring  [[AFNetworkReachabilityManager sharedManager] startMonitoring];   // 检测网络连接的单例,网络变化时的回调方法  [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {   NSLog(@"%d", status);  }]; } #pragma mark - Session 下载 - (void)sessionDownload {  NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];  AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:config];   NSString *urlString = @"http://localhost/itcast/videos/01.C语言-语法预览.mp4";  urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];   NSURL *url = [NSURL URLWithString:urlString];  NSURLRequest *request = [NSURLRequest requestWithURL:url];   NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {   // 指定下载文件保存的路径 // NSLog(@"%@ %@", targetPath, response.suggestedFilename);   // 将下载文件保存在缓存路径中   NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];   NSString *path = [cacheDir stringByAppendingPathComponent:response.suggestedFilename];     // URLWithString返回的是网络的URL,如果使用本地URL,需要注意   NSURL *fileURL1 = [NSURL URLWithString:path];   NSURL *fileURL = [NSURL fileURLWithPath:path];     NSLog(@"== %@ |||| %@", fileURL1, fileURL);     return fileURL;  } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {   NSLog(@"%@ %@", filePath, error);  }];   [task resume]; } #pragma mark - POST JSON - (void)postJSON {  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];   NSDictionary *dict = @{@"name": @"zhangsan"};  NSDictionary *dict1 = @{@"name": @"wangwu"};  NSArray *array = @[dict, dict1];  // 设置请求格式  manager.requestSerializer = [AFJSONRequestSerializer serializer];  // 设置返回格式  manager.responseSerializer = [AFHTTPResponseSerializer serializer];   [manager POST:@"http://localhost/postjson.php" parameters:array success:^(AFHTTPRequestOperation *operation, id responseObject) {   NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];     NSLog(@"%@", result);  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {    }];  } #pragma mark - 随机文件名上传 - (void)postUpload1 {  // 本地上传给服务器时,没有确定的URL,不好用MD5的方式处理  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  manager.responseSerializer = [AFHTTPResponseSerializer serializer];   [manager POST:@"http://localhost/demo/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {     NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];     // 要上传保存在服务器中的名称   // 使用时间来作为文件名 2014-04-30 14:20:57.png   // 让不同的用户信息,保存在不同目录中   NSDateFormatter *formatter = [[NSDateFormatter alloc] init];   // 设置日期格式   formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";   NSString *fileName = [formatter stringFromDate:[NSDate date]];     [formData appendPartWithFileURL:fileURL name:@"uploadFile" fileName:fileName mimeType:@"image/png" error:NULL];    } success:^(AFHTTPRequestOperation *operation, id responseObject) {   NSLog(@"OK");  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {   NSLog(@"error");  }]; } #pragma mark - POST上传 - (void)postUpload {  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  // AFHTTPResponseSerializer就是正常的HTTP请求响应结果:NSData  // 当请求的返回数据不是JSON,XML,PList,UIImage之外,使用AFHTTPResponseSerializer  // 例如返回一个html,text...  //  // 实际上就是AFN没有对响应数据做任何处理的情况  manager.responseSerializer = [AFHTTPResponseSerializer serializer];   // formData是遵守了AFMultipartFormData的对象  [manager POST:@"http://localhost/demo/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {     // 将本地的文件上传至服务器   NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];     [formData appendPartWithFileURL:fileURL name:@"uploadFile" error:NULL];  } success:^(AFHTTPRequestOperation *operation, id responseObject) {   NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];     NSLog(@"完成 %@", result);  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {   NSLog(@"错误 %@", error.localizedDescription);  }]; } #pragma mark - JSON - (void)XMLData {  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];   // 返回的数据格式是XML  manager.responseSerializer = [AFXMLParserResponseSerializer serializer];  

转载于:https://www.cnblogs.com/Hakim/p/5527720.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值