[iOS功能]- 从AFNetworking返回的Error中取

2020-02-26  本文已影响0人  AlwaysLuckyMa
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

typedef void(^AppToolBlock)(id result);
typedef void(^AppToolBlock)(id resultX);
typedef void(^errorblock)(id resultError);

@interface ServiceTools : NSObject

+ (NSString *)getUUID;

+ (void)geturlStr:(NSString *)urlStr Block:(AppToolBlock)block ErrorBlock:(errorblock)errorBlock;
// get请求使用
+ (void)geturlStr:(NSString *)urlStr Block:(AppToolBlock)block;

// post请求使用
+ (void)getPostWithURL:(NSString *)urlStr Body:(NSString *)body Block:(AppToolBlock)block;

+ (void)PostWithURL:(NSString *)urlStr NSDictionary:(NSDictionary *)dic Block:(AppToolBlock)block;

+ (void)methodUploadURL:(NSString *)urlStr
                 PicStr:(NSData *)Data
               MimeType:(NSString *)mimeType
                     Id:(id)parameters
                  Block:(AppToolBlock)block;
@end

NS_ASSUME_NONNULL_END
#import "ServiceTools.h"

@implementation ServiceTools

+ (NSString *)getUUID {
//    FB8A3FBB-4483-4ECA-AFAC-6FE33A716C41
//    CFC7FF5D-5D24-49AB-85E1-11112D75743D
   NSString * uuid = [[NSUUID UUID] UUIDString];
    return uuid;
}

+ (void)geturlStr:(NSString *)urlStr Block:(AppToolBlock)block ErrorBlock:(errorblock)errorBlock{
    // 编码
    NSString *urlEncode = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"text/json",@"application/json",@"text/javascript",@"text/html",nil];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.requestSerializer.timeoutInterval = 10.f; //
    
    // 设置非校验证书模式
    manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    manager.securityPolicy.allowInvalidCertificates = YES;
    [manager.securityPolicy setValidatesDomainName:NO];
    
    [manager GET:urlEncode parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        if (responseObject) {

            NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:nil];
            NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            block(obj);

        }else{
            NSLog(@"网络请求数据为空Service.h");
        }

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        if ([error.domain isEqualToString:AFURLResponseSerializationErrorDomain]) {
                // 服务器错误  server error
                id response = [NSJSONSerialization
                               JSONObjectWithData:error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey]
                               options:0
                               error:nil];
            
                errorBlock(response);
                // response中包含服务端返回的内容
            } else if ([error.domain isEqualToString:NSCocoaErrorDomain]) {
                // 服务器引发异常  server throw exception
                errorBlock(@"服务器引发异常");
            } else if ([error.domain isEqualToString:NSURLErrorDomain]) {
                // 网络错误  network error
                errorBlock(@"网络错误");
            }
    
    }];
    
}
+ (void)geturlStr:(NSString *)urlStr Block:(AppToolBlock)block
{
    // 编码
    NSString *urlEncode = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"text/json",@"application/json",@"text/javascript",@"text/html",nil];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.requestSerializer.timeoutInterval = 10.f; //
    
    // 设置非校验证书模式
    manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    manager.securityPolicy.allowInvalidCertificates = YES;
    [manager.securityPolicy setValidatesDomainName:NO];
    
    [manager GET:urlEncode parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        if (responseObject) {

            NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:nil];
            NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            block(obj);

        }else{
            NSLog(@"网络请求数据为空Service.h");
        }

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        NSLog(@"网络请求失败:%@",error);  //这里打印错误信息
    }];
    
    
}


// post请求
+ (void)getPostWithURL:(NSString *)url Body:(NSString *)body Block:(AppToolBlock)block
{
    // post地址
    NSString *strEncode = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSURL *urlStr = [NSURL URLWithString:strEncode];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlStr];
    
    // 设置请求对象的请求方式为POST请求,默认是get请求
    [request setHTTPMethod:@"POST"];
    // 将body体转化成data型数据
    NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding];
    // 设置为请求的body体
    [request setHTTPBody:bodyData];
    
    // 创建一个专门配置session的类,是系统对session兑现的一个标准配置
    NSURLSessionConfiguration *sessionConfigu = [NSURLSessionConfiguration defaultSessionConfiguration];
    
    // 另一个初始化方法
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfigu];
    NSURLSessionDataTask *postTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (data) {
            
            id resultX = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            // 请求成功后执行
            // responseObject返回数据位NSData
            //            [resultX writeToFile:filePath atomically:YES];
            
            block(resultX);
        }else{
            //  NSLog(@"失败==== %@",error);
            // 请求失败执行从本地取出数据
            //            if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
            //                id result = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
            // 通过block回调数据
            block(error);
            //            }
            
        }
    }];
    [postTask resume];
}

+ (void)methodUploadURL:(NSString *)urlStr
                 PicStr:(NSData *)Data
               MimeType:(NSString *)mimeType
                     Id:(id)parameters
                  Block:(AppToolBlock)block{
    
    //1。创建管理者对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"text/json",@"application/json",@"text/javascript",@"text/html",nil];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    
    
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    // 设置时间格式
    formatter.dateFormat = @"yyyyMMddHHmmss";
    NSString *str = [formatter stringFromDate:[NSDate date]];
    NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
    
    [manager POST:urlStr parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
        [formData appendPartWithFileData:Data name:@"image" fileName:fileName mimeType:mimeType];
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        // NSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //请求成功
        if(responseObject){
            block(responseObject);
            //             NSLog(@"请求成功:%@",responseObject);
            
        }
        
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //请求失败
        // NSLog(@"请求失败:%@",error);
        
    }];
}

+ (void)PostWithURL:(NSString *)urlStr NSDictionary:(NSDictionary *)dic Block:(AppToolBlock)block{
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"text/json",@"application/json",@"text/javascript",@"text/html",nil];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.requestSerializer.timeoutInterval = 20.f; //
//    [manager POST:urlStr parameters:dic progress:nil success:^(NSURLSessionTask *task, id responseObject) {
//
//        if (responseObject) {
//
//            NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:nil];
//            NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//            block(obj);
//            NSLog(@"请求成功:%@",obj);
//
//        }else{
//            NSLog(@"网络请求数据为空Service.h");
//        }
//    } failure:^(NSURLSessionTask *operation, NSError *error) {
//        NSLog(@"Error: %@", error);
//    }];
    
    //AFN管理者调用get请求方法
    [manager POST:urlStr parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
        //返回请求返回进度
        NSLog(@"downloadProgress-->%@",uploadProgress);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //请求成功返回数据 根据responseSerializer 返回不同的数据格式

        if (responseObject) {
            NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:nil];
            NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
            block(obj);
            NSLog(@"请求成功:%@",obj);
            
        }
//                NSLog(@"responseObject-->%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //请求失败
        NSLog(@"error-->%@",error);
    }];
}

@end

上一篇下一篇

猜你喜欢

热点阅读