AFN 框架使用总结

//
//  ViewController.m
//  08-AFN的使用(掌握)
//
//  Created by LTOVE on 15/10/22.
//  Copyright (c) 2015年 LTOVE. All rights reserved.
/**
 // 请求的数据格式,发送给服务器的格式
 self.requestSerializer = [AFHTTPRequestSerializer serializer];
 AFHTTPRequestSerializer  二进制的数据格式 (默认的)
 AFJSONRequestSerializer  JSON
 AFPropertyListRequestSerializer PList
 
 // 响应的解析器(默认直接解析JSON)
 self.responseSerializer = [AFJSONResponseSerializer serializer];
 AFHTTPResponseSerializer   二进制
 AFJSONResponseSerializer   JSON  (默认的数据格式)
 AFXMLParserResponseSerializer  XML的解析器
 AFImageResponseSerializer  Image
 (处理网络图片的问题, SDWebImage)
 
 */
#pragma mark ****************小结begin****************
/**
 AFN小结
 功能:
 - 对NSURLSession & NSURLConntion的封装
 - 提供了反序列化的方法
 - 提供了完善的错误处理机制
 
 在网络开发中的,最大的变化的部分-->  NSURLResquest
 1. HTTP的方法:GET/POST/PUT/DELEGATE
 2. 请求体
 - 内容的类型 Content-Type POST上传
 - 浏览器的类型
 */

#import "ViewController.h"
#import "AFNetworking.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
    [self postUpLoad];
    
}

#pragma mark - POST上传图片
- (void)postUpLoad
{
    // url
    NSString *urlStr = @"http://127.0.0.1/post/upload.php";
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    [manager POST:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        
        // 要上传的图片的路径
        NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"Snip20150123_3.png" withExtension:nil];
        
        /**
         FileURL:要上传的文件的url
         name: 上传到服务器,接受这个图片的字段名
         这种方式,没办法修改这个文件在服务器的名称
         */
//        [formData appendPartWithFileURL:fileUrl name:@"userfile" error:NULL];
        /**
         FileURL:要上传的文件的url
         name: 上传到服务器,接受这个图片的字段名
         fileName :  这个文件在服务器的名称
         mimeType: 表示要上传的文件的类型
             格式: 大类/小类
             JPG image/jpg
             PNG image/png
             JSON application/json
         
         */
        [formData appendPartWithFileURL:fileUrl name:@"userfile" fileName:@"123321.png" mimeType:@"image/png" error:NULL];
        
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"success");
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"failure");
    }];
}

#pragma mark - XML的解析
- (void)getXML
{
    NSString *urlStr = @"http://127.0.0.1/videos.xml";
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    // 指定我们的响应的解析器是解析XML (会返回NSXMLParser:对象)也就是需要SAX方式手动解析
//    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
    
     // 假如想使用DOM进行解析XML,可以指定响应的类型是二进制。拿到二进制数据就可以进行DOM解析
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    // GET方法
    [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        // 已经把反序列化完成的结果都直接返回了。可以更新UI了
        
        NSLog(@"%@  %@", responseObject, [NSThread currentThread]);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
        NSLog(@"%@", error);
        
    }];
}

#pragma mark - 常规的方法
/**
 POST方法,如果需要传递参数,也可以以字典的形式传递.
 */
/**post登录*/
- (void)postLogin
{
    NSString *urlStr = @"http://127.0.0.1/login.php";
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    NSDictionary *params = @{@"password" : @"zhang", @"username" : @"zhangsan"};
    
    // POST方法
    [manager POST:urlStr parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        NSLog(@"%@  %@", responseObject, [NSThread currentThread]);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@", error);
        
    }];
}

/**
 1. 没有URL,只需要指定一个url的字符串
 2. 网络请求是异步。 完成以后的回调代码快直接是在主线程
 3. 已经实现了反序列化
 4. 如果get方法,需要传递参数,可以使用字段的方式传递。程序猿不需要关心url里面的参数格式
 */
/**get登录*/
- (void)getLogin2
{
    NSString *urlStr = @"http://127.0.0.1/login.php";
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    NSDictionary *params = @{@"password" : @"zhang", @"username" : @"zhangsan"};
    
    // GET方法
    [manager GET:urlStr parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"%@  %@", responseObject, [NSThread currentThread]);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@", error);
        
    }];
}

- (void)getLogin
{
    NSString *urlStr = @"http://127.0.0.1/login.php?username=zhangsan&password=zhang";
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    
    // GET方法
    [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"%@  %@", responseObject, [NSThread currentThread]);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@", error);

    }];
}

- (void)getDemo
{
    NSString *urlStr = @"http://127.0.0.1/videos.json";
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
    // GET方法
    [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        // 已经把反序列化完成的结果都直接返回了。可以更新UI了
        
        NSLog(@"%@  %@", responseObject, [NSThread currentThread]);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@", error);
        
    }];
    
    NSLog(@"完成");
    
}

@end

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值