天天看点

NSURLSession的网络请求类2 封装 缓存 轻量 低耦合 CC_HttpTask 解决了打印日志对于Unicode编码不能正常显示中文的问题

出处https://blog.csdn.net/gwh111/article/details/79700933

免费下载https://github.com/gwh111/bench_ios

积分下载https://download.csdn.net/download/gwh111/10344443

使用特点:

1、轻量、代码量少、默认使用原生NSURLSession,可替换成AFNetwordking等库

2、低耦合、可根据app配置必要属性,含签名

3、缓存,在debug中缓存上一次成功数据,实际开发遇到服务端发系统时,可使用缓存数据继续开发。

4、解析json,可二次封装回调model

调用,使用方法

//http头部信息
    [[CC_HttpTask getInstance]setRequestHTTPHeaderFieldDic:
  @{@"appName":@"ljzsmj_ios",
    @"appVersion":@"1.0.3",
    @"appUserAgent":@"e1",
    }];
    //签名的key 一般登录后获取
    [[CC_HttpTask getInstance]setSignKeyStr:@"abc"];
    //额外每个请求要传的参数
    [[CC_HttpTask getInstance]setExtreDic:@{@"key":@"v"}];
    NSURL *url=[NSURL URLWithString:@"http://xxx/service.json?"];
    [[CC_HttpTask getInstance]post:url Params:@{@"service":@"PURCHASE_ORDRE_JOINED_SHOW_CONFIG_QUERY"} model:[[ResModel alloc]init] FinishCallbackBlock:^(NSString *error, ResModel *result) {
        if (error) {
            [CC_Note showAlert:error];
            return ;
        }
        
        CCLOG(@"%@",result.resultDic);
    }];
           

params是请求接口参数

NSString *paraString=[CC_FormatDic getSignFormatStringWithDic:paramsDic andMD5Key:_signKeyStr];
           

signkey是签名,用的是md5签名,可根据服务端要求修改

ResModel是解析的模型,含有解析后的数据和源数据

有两部分组成,ResModel是数据分析模型

//
//  CC_HttpResponseModel.h
//  bench_ios
//
//  Created by gwh on 2018/3/19.
//  Copyright © 2018年 apple. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface ResModel : NSObject

@property(nonatomic,assign) BOOL debug;
@property(nonatomic,retain) NSString *serviceStr;

@property(nonatomic,retain) NSString *resultStr;
@property(nonatomic,retain) NSDictionary *resultDic;

@property(nonatomic,retain) NSString *errorStr;

- (void)parsingError:(NSError *)error;
- (void)parsingResult:(NSString *)resultStr;

@end
           

分析了错误和正确数据

在debug下,错误后还会去找缓存数据,来回调到正确结果中。

将网络请求的错误和服务端的错误统一回调到error中,因为对于我们前端而言,无论哪种错误,只要不是正确数据,就要分开处理,比如显示error,所以将两种回调合并。

if (_resultDic[@"response"][@"error"]) {//服务端的错误
            _errorStr=_resultDic[@"response"][@"error"][@"name"];
        }
           

默认的合并条件是respose中的error,这里可根据不同服务端结构修改

将请求服务名,请求地址和回调统一打印,解决找不到哪个service回调哪个结果的问题

如果debug模式,默认一起打印

if (model.debug) {
                CCLOG(@"\nURL:%@%@\nRes:%@",url,paraString,model.resultDic);
            }
           

解析操作在子线程中进行,之后回到主线程

demo下载地址https://github.com/gwh111/bench_ios