美文网首页iOS开发我爱编程
封装AFNetWorking的网络请求的工具类

封装AFNetWorking的网络请求的工具类

作者: 风规自远 | 来源:发表于2018-04-11 10:15 被阅读99次

    //

    //  HttpTool.h

    //  AFNetWorking 3.0 工具类

    //

    //  Created by peony on 18/1/21.

    //  Copyright (c) 2018年 zsl. All rights reserved.

    //

    #import

    @class FormData;

    @interfaceHttpTool :NSObject

    /**

     *  发送一个GET请求

     *

     *  @param url    请求路径

     *  @param params  请求参数

     *  @param success 请求成功后的回调(请将请求成功后想做的事情写到这个block中)

     *  @param failure 请求失败后的回调(请将请求失败后想做的事情写到这个block中)

     */

    + (void)get:(NSString*)url params:(NSDictionary*)params session:(NSString*)session success:(void(^)(idjson))success failure:(void(^)(NSError*error))failure;

    /**

     *  发送一个POST请求

     *

     *  @param url    请求路径

     *  @param params  请求参数

     *  @param success 请求成功后的回调(请将请求成功后想做的事情写到这个block中)

     *  @param failure 请求失败后的回调(请将请求失败后想做的事情写到这个block中)

     */

    + (void)post:(NSString*)url params:(NSDictionary*)params session:(NSString*)session success:(void(^)(idjson))success failure:(void(^)(NSError*error))failure;

    /**

     *  发送一个POST文件请求

     *

     *  @param url      请求路径

     *  @param params  请求参数

     *  @param dataSource 文件参数

     *  @param success  请求成功后的回调(请将请求成功后想做的事情写到这个block中)

     *  @param failure  请求失败后的回调(请将请求失败后想做的事情写到这个block中)

     */

    + (void)post:(NSString*)url params:(NSDictionary*)params session:(NSString*)session dataSource:(FormData*)dataSource success:(void(^)(idjson))success failure:(void(^)(NSError*error))failure;

    /**

     多张图片上传

     @param url 接口

     @param params 参数

     @param images 图片数组

     @param success 成功状态

     @param failure 失败状态

     */

     + (void)postMoreDataWithUrl:(NSString*)url Params:(NSDictionary*)params ImageParams:(NSString*)imageParams Session:(NSString*)session  ImageArray:(NSMutableArray*)images Success:(void(^)(idjson))success Failure:(void(^)(NSError*error))failure;

    @end

    /**

     *  用来封装文件数据的模型

     */

    @interfaceFormData :NSObject

    /**

     *  文件数据

     */

    @property(nonatomic, strong)NSData * data;

    /**

     *  参数名

     */

    @property(nonatomic, copy)NSString *paramsName;

    /**

     *  文件名

     */

    @property(nonatomic, copy)NSString *filename;

    /**

     *  文件类型

     */

    @property(nonatomic, copy)NSString *mimeType;

    @end

    //

    //  HttpTool.h

    //  AFNetWorking 3.0 工具类

    //

    //  Created by peony on 15/7/21.

    //  Copyright (c) 2015年 zsl. All rights reserved.

    //

    #import "HttpTool.h"

    #import "AFNetworking.h"

    @interface HttpTool ()

    @end

    @implementation HttpTool

    /**

     *  发送一个GET文件请求

     *

     *  @param url      请求路径

     *  @param params  请求参数

     *  @param success  请求成功后的回调(请将请求成功后想做的事情写到这个block中)

     *  @param failure  请求失败后的回调(请将请求失败后想做的事情写到这个block中)

     */

    + (void)get:(NSString*)url params:(NSDictionary*)params session:(NSString*)session success:(void(^)(id))success failure:(void(^)(NSError*))failure {

        // 1.获得请求管理者

        AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];

        [mgr.requestSerializer setValue:session forHTTPHeaderField:@"Cookie"];

        //[mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

        mgr.requestSerializer = [AFJSONRequestSerializer serializer];

        //申明返回的结果是json类型

        mgr.responseSerializer = [AFJSONResponseSerializer serializer];

        // 2.发送GET请求

        [mgrGET:urlparameters:paramsprogress:^(NSProgress*_NonnulldownloadProgress) {

        }success:^(NSURLSessionDataTask*_Nonnulltask,id  _NullableresponseObject) {

            NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;

            NSString*cookieStr = response.allHeaderFields[COOKIE];

            if(cookieStr !=nil) {

                // 根据cookie中的内容字符串用“; ”来分割出cookie

                NSArray*result = [cookieStrcomponentsSeparatedByString:@"; "];

                NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

                OMGLog(@"cookieStr=======>%@",result[0]);

                [userDefaultssetObject:result[0]forKey:COOKIE];

                [userDefaultssynchronize];

            }

            if(success) {

                success(responseObject);

            }

        }failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {

            if(failure) {

                failure(error);

                [SVProgressHUD showErrorWithStatus:@"连接服务器超时"];

            }

        }];

    }

    /**

     *  发送一个POST请求

     *

     *  @param url      请求路径

     *  @param params  请求参数

     *  @param success  请求成功后的回调(请将请求成功后想做的事情写到这个block中)

     *  @param failure  请求失败后的回调(请将请求失败后想做的事情写到这个block中)

     */

    + (void)post:(NSString*)url params:(NSDictionary*)params session:(NSString*)session success:(void(^)(id))success failure:(void(^)(NSError*))failure {

        // 1.获得请求管理者

        AFHTTPSessionManager * mgr = [AFHTTPSessionManager manager];

        [mgr.requestSerializer setValue:session forHTTPHeaderField:@"Cookie"];

        [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

         mgr.requestSerializer = [AFJSONRequestSerializer serializer];

         //申明返回的结果是json类型

         mgr.responseSerializer = [AFJSONResponseSerializer serializer];

        // 2.发送POST请求

        [mgrPOST:urlparameters:paramsprogress:^(NSProgress*_NonnulluploadProgress) {

        }success:^(NSURLSessionDataTask*_Nonnulltask,id  _NullableresponseObject) {

            NSHTTPURLResponse * response = (NSHTTPURLResponse *)task.response;

            NSString*cookieStr = response.allHeaderFields[COOKIE];

            if(cookieStr !=nil) {

                NSArray*result = [cookieStrcomponentsSeparatedByString:@"; "];

                NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

                OMGLog(@"cookieStr=======>%@",result[0]);

                [userDefaultssetObject:result[0]forKey:COOKIE];

            }

            if(success) {

                success(responseObject);

            }

        }failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {

            if(failure) {

                failure(error);

                [SVProgressHUD showErrorWithStatus:@"连接服务器超时"];

            }

        }];

    }

    /**

     *  发送单个POST文件请求

     *

     *  @param url      请求路径

     *  @param params  请求参数

     *  @param dataSource 文件参数

     *  @param success  请求成功后的回调(请将请求成功后想做的事情写到这个block中)

     *  @param failure  请求失败后的回调(请将请求失败后想做的事情写到这个block中)

     */

    + (void)post:(NSString*)url params:(NSDictionary*)params session:(NSString*)session dataSource:(FormData*)dataSource success:(void(^)(id))success failure:(void(^)(NSError*))failure {

        // 1.获得请求管理者

        AFHTTPSessionManager * mgr = [AFHTTPSessionManager manager];

        [mgr.requestSerializer setValue:session forHTTPHeaderField:@"Cookie"];

        [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

        mgr.requestSerializer = [AFJSONRequestSerializer serializer];

        //申明返回的结果是json类型

        mgr.responseSerializer = [AFJSONResponseSerializer serializer];

        // 2.请求内容

        [mgrPOST:url parameters:params constructingBodyWithBlock:^(id  _Nonnull formData) {

            [formDataappendPartWithFileData:dataSource.data name:dataSource.paramsName fileName:dataSource.filename mimeType:dataSource.mimeType];

        }progress:^(NSProgress*_NonnulluploadProgress) {

        }success:^(NSURLSessionDataTask*_Nonnulltask,id  _NullableresponseObject) {

            NSHTTPURLResponse * response = (NSHTTPURLResponse *)task.response;

            NSString*cookieStr = response.allHeaderFields[COOKIE];

            if(cookieStr !=nil) {

                NSArray*result = [cookieStrcomponentsSeparatedByString:@"; "];

                NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

                OMGLog(@"cookieStr=======>%@",result[0]);

                [userDefaultssetObject:result[0]forKey:COOKIE];

            }

            if(success) {

                success(responseObject);

            }

        }failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {

            if(failure) {

                failure(error);

                [SVProgressHUD showErrorWithStatus:@"服务器异常"];

            }

        }];

    }

    /**

     多张图片上传

     @param url 接口

     @param params 参数

     @param images 图片数组

     @param success 成功状态

     @param failure 失败状态

     */

     + (void)postMoreDataWithUrl:(NSString*)url Params:(NSDictionary*)params ImageParams:(NSString*)imageParams Session:(NSString*)session  ImageArray:(NSMutableArray*)images Success:(void(^)(idjson))success Failure:(void(^)(NSError*error))failure {

        AFHTTPSessionManager * mgr = [AFHTTPSessionManager manager];

        [mgr.requestSerializer setValue:session forHTTPHeaderField:@"Cookie"];

        [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

        mgr.requestSerializer = [AFJSONRequestSerializer serializer];

        //申明返回的结果是json类型

        mgr.responseSerializer = [AFJSONResponseSerializer serializer];

        [mgrPOST:url parameters:params constructingBodyWithBlock:^(id  _Nonnull formData) {

            for(UIImage*imageinimages) {

                // 图片太大会上传不到服务器上面去

                NSData*imageData =UIImageJPEGRepresentation(image,0.1);;

                // 在网络开发中,上传文件时,是文件不允许被覆盖,文件重名

                // 要解决此问题,

                // 可以在上传时使用当前的系统事件作为文件名

                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

                // 设置时间格式

                formatter.dateFormat =@"yyyyMMddHHmmss";

                NSString *str = [formatter stringFromDate:[NSDate date]];

                NSString *fileName = [NSString stringWithFormat:@"%@.png", str];

                /*

                 此方法参数

                 1. 要上传的[二进制数据]

                 2. 对应网站上[upload.php中]处理文件的[字段"files"]

                 3. 要保存在服务器上的[文件名]

                 4. 上传文件的[mimeType]

                 */

                [formData appendPartWithFileData:imageData name:imageParams fileName:fileName mimeType:@"image/jpeg"];

            }

        } progress:^(NSProgress *_NonnulluploadProgress) {

        } success:^(NSURLSessionDataTask *_Nonnulltask,id  _NullableresponseObject) {

            NSHTTPURLResponse * response = (NSHTTPURLResponse *)task.response;

            NSString *cookieStr = response.allHeaderFields[COOKIE];

            if(cookieStr !=nil) {

                NSArray *result = [cookieStr componentsSeparatedByString:@"; "];

                NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

                OMGLog(@"cookieStr=======>%@",result[0]);

                [userDefaults setObject:result[0] forKey:COOKIE];

            }

            success(responseObject);

        } failure:^(NSURLSessionDataTask *_Nullabletask, NSError *_Nonnullerror) {

            failure(error);

        }];

    }

    @end

    /**

     *  用来封装文件数据的模型

     */

    @implementation FormData

    @end

    相关文章

      网友评论

        本文标题:封装AFNetWorking的网络请求的工具类

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