zoukankan      html  css  js  c++  java
  • 网络请求工具--AFNetworking 分类: ios技术 2015-02-03 08:17 76人阅读 评论(0) 收藏

        在我们开发过程中,网络请求是必不可少的,对于网络框架,现在主流的大概只有三类:ASI框架HTTP终结者(已经停止更新了),MKNetworkKit ,AFN.今天我就来浅谈一下这个AFN

        AFNetworing的使用

        

    1、AFN特性 :
    *登录传参数时,传递字典即可.(键名为参数名,键值为参数值).
    *自动到子线程中执行,执行完后返回主线程.
    *返回的结果自动序列化为NSDictionary.
    2、使用AFN注意 :
    *AFHTTPRequestOperationManager封装了通过HTTP协议与Web应用程序进行通讯的常用方法.(这个实例化的时候不是单例, 因为没有shared字)
    *包括创建请求/响应序列化/网络监控/数据安全.
    *方法等都是以AF开头的.

    3、AFN能做的 (网络中的都涵盖了):
    *GET/POST/PUT/DELETE/HEAD请求.
    *JSON数据解析/Plist数据解析.(不支持XML数据解析)
    *POSTJSON.
    *上传/下载.

    数据请求:
    - (void)getJSON {  
        //1.请求管理器  
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
    	
        //2.发起请求  
        [manager GET:@"http://localhost/videos.json" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {  
            NSLog(@"%@", responseObject);  
        } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  
            NSLog(@"%@", error);  
        }];  
    }  
      
    /** 
     *  不支持XML数据解析 
     */  
    - (void)getXML {  
        //1.管理器  
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
      
        //2.设置返回数据类型  
        manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //先实例化一下  
      
        //3.发起请求  
        [manager GET:@"http://localhost/videos.xml" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {  
            NSLog(@"%@", responseObject);  
        } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  
            NSLog(@"%@", error);  
        }];  
    }  
      
    - (void)getPlist {  
        //1.管理器  
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
      
        //2.设置response类型  
        manager.responseSerializer = [AFPropertyListResponseSerializer serializer]; //是Response, 别写成request了. 修改为plist类型.  
        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //这个可以直接往框架里面修改.  
      
        //3.请求  
        [manager GET:@"http://localhost/videos.plist" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {  
            NSLog(@"%@", responseObject);  
        } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  
            NSLog(@"%@", error);  
        }];  
    }  



    AFN上传
    - (void)uploadImageWithImage:(NSString *)imagePath
    {
        //上传其他所需参数
        NSString *userId=XXXXXXXXXXX;
        NSString *token=XXXXXXXXXXX;
       
        //上传请求POST
        AFHTTPClient *client=[AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@""]];
    
        NSString *urlString=[NSString stringWithFormat:@"上传服务器地址];
        NSDictionary *dic=[[NSDictionary alloc] initWithObjectsAndKeys:userId,@"XXXXXX",token,@"XXXXXX",nil];
       
        NSURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:urlString parameters:dicconstructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            
            //得到需要上传的数据
            NSData *data=[NSData dataWithContentsOfFile:imagePath];
            
          
            //上传时使用当前的系统事件作为文件名
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyyMMddHHmmss";
            NSString *str = [formatter stringFromDate:[NSDate date]];
            NSString *fileName = [NSString stringWithFormat:@"%@.jpg", str];
            
            
            /*
             此方法参数
             1. 要上传的[二进制数据]
             2. 对应网站上[upload.php中]处理文件的[字段"file"]
             3. 要保存在服务器上的[文件名]
             4. 上传文件的[mimeType]
             */
    
    //服务器上传文件的字段和类型
            [formData appendPartWithFileData:data name:@"XXXXX" fileName:fileNamemimeType:@"image/jpg/file"];
        }];
       
        // 3. operation包装的urlconnetion
        AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
       
        [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"上传完成");
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"上传失败->%@", error);
        }];
       
        //执行
        [client.operationQueue addOperation:op];
    }


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    BPC (9) SAP BI & BPC 安装 : 一个外行眼里的千奇百怪 (1)
    ESB (2) POCSofewareAG
    BPC (7) BPC Netweaver 7 和 microsoft 7 版本的差异
    ESB (3) POCOralce ESB
    厘清了xorg里的一些概念
    Top命令和Kill命令
    ubuntu中文英文环境切换
    /etc/passwd 文件内容详细解释
    [分享] Linux下用Anjuta写个Hello World 的C++程序竟如此简单!
    /proc目录
  • 原文地址:https://www.cnblogs.com/liuqixu/p/4684008.html
Copyright © 2011-2022 走看看