网络请求工具--AFNetworking 分类: ios技术 ...

本文深入探讨AFNetworking框架的特性、使用方法及注意事项,并通过示例代码展示如何利用其进行数据请求、JSON数据解析、Plist数据解析及上传操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在我们开发过程中,网络请求是必不可少的,对于网络框架,现在主流的大概只有三类: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];
}


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

转载于:https://www.cnblogs.com/liuqixu/p/4684008.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值