美文网首页
[iOS功能]- 从AFNetworking返回的Error中取

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

作者: AlwaysLuckyMa | 来源:发表于2020-02-26 15:37 被阅读0次
    #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
    
    

    相关文章

      网友评论

          本文标题:[iOS功能]- 从AFNetworking返回的Error中取

          本文链接:https://www.haomeiwen.com/subject/hahagctx.html