AFNetworking3.1 基本使用

原创 2016年05月31日 21:58:45
#import "HttpsManager.h"

@implementation HttpsManager
#pragma mark - 创建请求者
+(AFHTTPSessionManager *)manager
{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 超时时间
    manager.requestSerializer.timeoutInterval = kTimeOutInterval;
    
    // 声明上传的是json格式的参数,需要你和后台约定好,不然会出现后台无法获取到你上传的参数问题
    manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 上传普通格式
    //    manager.requestSerializer = [AFJSONRequestSerializer serializer]; // 上传JSON格式
    
    // 声明获取到的数据格式
    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // AFN不会解析,数据是data,需要自己解析
    //    manager.responseSerializer = [AFJSONResponseSerializer serializer]; // AFN会JSON解析返回的数据
    // 个人建议还是自己解析的比较好,有时接口返回的数据不合格会报3840错误,大致是AFN无法解析返回来的数据
    return manager;
}

+ (void)getUserCarShopAndSalesDataForSalesWithUserId:(NSString *)userId date:(NSString *)date selectAreaType:(NSString *)areaType Success:(SuccessBlock)success fail:(AFNErrorBlock)fail
{
    // get请求也可以直接将参数放在字典里,AFN会自己讲参数拼接在url的后面,不需要自己凭借
    NSDictionary *param = @{@"user_id":userId, @"sale_date":date, @"accessToken":@"e9c0e60318ebd07ec2fe", @"area_type":areaType};
    // 创建请求类
    AFHTTPSessionManager *manager = [self manager];
    [manager GET:@"http://pm.yunhan-china.com/index.php/Api_sale/sales_get" parameters:param progress:^(NSProgress * _Nonnull downloadProgress) {
        // 这里可以获取到目前数据请求的进度
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        // 请求成功
        if(responseObject){
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
            success(dict,YES);
        } else {
            success(@{@"msg":@"暂无数据"}, NO);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        // 请求失败
        fail(error);
    }];
}

+ (void)loginWithUserAccount:(NSString *)account password:(NSString *)password success:(SuccessBlock)success fail:(AFNErrorBlock)fail
{
    // 将请求参数放在请求的字典里
    NSDictionary *param = @{@"phoneNumber":account, @"password":@"f379eaf3c831b04de153469d1bec345e"};
    // 创建请求类
    AFHTTPSessionManager *manager = [self manager];
    [manager POST:@"http://pm.yunhan-china.com/index.php/api_common/login"
       parameters:param
         progress:^(NSProgress * _Nonnull uploadProgress) {
        // 这里可以获取到目前数据请求的进度
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        // 请求成功
        if(responseObject){
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
            success(dict,YES);
        } else {
            success(@{@"msg":@"暂无数据"}, NO);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        // 请求失败
        fail(error);
    }];
    
}

- (void)downLoadWithUrlString:(NSString *)urlString
{
    // 1.创建管理者对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 2.设置请求的URL地址
    NSURL *url = [NSURL URLWithString:urlString];
    // 3.创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // 4.下载任务
    NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        // 下载进度
        NSLog(@"当前下载进度为:%lf", 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        // 下载地址
        NSLog(@"默认下载地址%@",targetPath);
        // 设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象
        NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
        return [NSURL fileURLWithPath:filePath]; // 返回的是文件存放在本地沙盒的地址
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        // 下载完成调用的方法
        NSLog(@"%@---%@", response, filePath);
    }];
    // 5.启动下载任务
    [task resume];
}

- (void)uploadWithUser:(NSString *)userId UrlString:(NSString *)urlString upImg:(UIImage *)upImg
{
    // 创建管理者对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 参数
    NSDictionary *param = @{@"user_id":userId};
    [manager POST:urlString parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        /******** 1.上传已经获取到的img *******/
        // 把图片转换成data
        NSData *data = UIImagePNGRepresentation(upImg);
        // 拼接数据到请求题中
        [formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];
        /******** 2.通过路径上传沙盒或系统相册里的图片 *****/
        //        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        // 打印上传进度
        NSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //请求成功
        NSLog(@"请求成功:%@",responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //请求失败
        NSLog(@"请求失败:%@",error);
    }];
}

- (void)AFNetworkStatus{
    
    //1.创建网络监测者
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    
    /*枚举里面四个状态  分别对应 未知 无网络 数据 WiFi
     typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
     AFNetworkReachabilityStatusUnknown          = -1,      未知
     AFNetworkReachabilityStatusNotReachable     = 0,       无网络
     AFNetworkReachabilityStatusReachableViaWWAN = 1,       蜂窝数据网络
     AFNetworkReachabilityStatusReachableViaWiFi = 2,       WiFi
     };
     */
    
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        //这里是监测到网络改变的block  可以写成switch方便
        //在里面可以随便写事件
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未知网络状态");
                break;
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"无网络");
                break;
                
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"蜂窝数据网");
                break;
                
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"WiFi网络");
                
                break;
                
            default:
                break;
        }
        
    }] ;
}


@end

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

AFNetworking3.1 二次封装

@interface BJAppClient : AFHTTPSessionManager + (instancetype)sharedClient; @end static NSString ...
  • heberan
  • heberan
  • 2016年06月02日 14:54
  • 5744

iOS 网络编程 (七)AFNetworking 3.1.0 使用

AFNetworking从3.0.0版本移移除了NSURLConnection的使用,而是使用NSURLSession实现网络请求。 AFNetworking属于第三方框镜,需要将其源码导入工程。两...
  • VNanyesheshou
  • VNanyesheshou
  • 2016年09月29日 13:41
  • 3172

iOS之AFNetworking实现原理和使用方法

AFHTTPClient处理GET和POST请求 在要经常调用某个请求时,可以封装,节省资源。 http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求...
  • ygh5123687
  • ygh5123687
  • 2017年04月19日 18:19
  • 2261

iOS 网络编程 (七)AFNetworking 3.1.0 使用

AFNetworking从3.0.0版本移移除了NSURLConnection的使用,而是使用NSURLSession实现网络请求。 AFNetworking属于第三方框镜,需要将其源码导入工程。两...
  • VNanyesheshou
  • VNanyesheshou
  • 2016年09月29日 13:41
  • 3172

iOS开发之适配IPV6更新网络处理为AFNetworking3.x, 集成以及遇到的一些问题总结。

(一). 项目集成 (由于我这个是老项目,所以用的是最原始的集成方法)       1.下载最新源码:下载地址        2.然后直接把下载下来的源码文件夹AFNetworking直接拖入工程。 ...
  • zhonggaorong
  • zhonggaorong
  • 2016年05月24日 11:54
  • 11015

AFNetworking3.0的基本使用方法

AFNetworking3.0的基本使用方法
  • super_man_ww
  • super_man_ww
  • 2016年11月09日 10:42
  • 2243

iOS关于AFNetworking使用发现内存泄漏以及解决

关于AFNetworking使用发现内存泄漏以及解决众所周知,使用一些第三方的时候,程序猿都会对第三方进行一层封装,使第三方与我们的代码隔离,当有修改的时候我们只需要在自己封装的文件上做修改,这样减少...
  • HurryUpCheng
  • HurryUpCheng
  • 2017年05月08日 14:46
  • 1097

AFNetworking 请求HTTPS时 SSL的身份验证设置

之前一直在使用的是http,从i0S9更新之后,苹果要求使用https,目的是为了防止中间人攻击,保证数据的安全性. http和https 具体不懂的可以百度! AFN如何验证SSL呢? 第一web端...
  • Kongweikun
  • Kongweikun
  • 2015年10月11日 22:23
  • 2391

AFNetworking的使用方法

要使用常规的AFN网络访问    1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]...
  • Dafei_master
  • Dafei_master
  • 2016年09月05日 23:14
  • 791

iOS之AFNetworking实现原理和使用方法

AFHTTPClient处理GET和POST请求 在要经常调用某个请求时,可以封装,节省资源。 http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求...
  • ygh5123687
  • ygh5123687
  • 2017年04月19日 18:19
  • 2261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AFNetworking3.1 基本使用
举报原因:
原因补充:

(最多只允许输入30个字)