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

//

//  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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容