给大家分享一个基于AFN封装的网络请求

git: https://github.com/zhouxihi/NVNetworking

#带缓存机制的网络请求

各类请求有分带缓存 , 不带缓存, 可自定义, 默认请求头和解析头等几种方式

#没有缓存机制的网络请求库

##初始化

//测试初始化
_nvNetworking = [NVNetworking shareInstance];

//测试设置beseUrl
[_nvNetworking setBaseUrl:@"http://xdf-new-test.novasoftware.cn/api"];

//测试设置需要授权
[_nvNetworking setAuthorizationRequired:true];

//检测网络监听
[_nvNetworking startMonitorNetworkWithBlock:^(NVNetworkStatus status) {

  NSLog(@"status: %lu", status);
}];

##默认请求样式

//使用默认请求样式:
[_nvNetworking get:@"/open/ads" parameters:nil progress:^(NSProgress *downloadProgress) {

NSLog(@"进度: %f", downloadProgress.fractionCompleted);
} callback:^(ApiResult *result, id responseObject) {

  if (result.success) {

    NSLog(@"%@", result.data);
}

NSLog(@"请求结束后网络请求个数: %lu", (unsigned long)[[_nvNetworking getAllTask] count]);
}];

NSLog(@"请求结束前网络请求个数: %lu", (unsigned long)[[_nvNetworking getAllTask] count]);

##取消所有任务

[_nvNetworking cancelAllTask];

##取消特定api的请求

[_nvNetworking cancelTaskWithApi:@"open/ads"];

##带任务返回的请求Get/Post

NVNetworking *manager = [NVNetworking shareInstance];
_task = [manager nv_get:@"/pushMessage/GetpushMessages?phonenumber=18502329837" parameters:nil progress:nil callback:^(ApiResult *result, id responseObject) {

  if (result.success) {

    NSLog(@"回调: %@", result.data);
    NSDictionary *dict = [result.data mj_keyValues];
    NSLog(@"dict: %@", dict);
  } else {

    NSLog(@"失败回调: %@", responseObject);
    NSLog(@"失败code: %i", result.error.code);
  }
}];

##取消任务

[_task cancel];

##自定义请求样式

AFHTTPRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
AFHTTPResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializer];

[_nvNetworking get:@"/open/ads" parameters:nil requestSerializer:requestSerializer responseSerializer:responseSerializer header:nil progress:^(NSProgress *downloadProgress) {

NSLog(@"%f", downloadProgress.fractionCompleted);
} callback:^(ApiResult *result, id responseObject) {

  NSLog(@"请求结束后网络请求个数: %lu", (unsigned long)[[_nvNetworking getAllTask] count]);
  if (result.success) {

  NSLog(@"%@", result.data);
  }
}];

##网络监听

[_nvNetworking startMonitorNetworkWithBlock:^(NVNetworkStatus status) {

  switch (status) {
    case k3GNetwork:
      NSLog(@"3G网");
      break;

    case kWiFiNetwork:
      NSLog(@"wifi");
      break;

    case kNoNetwork:
      NSLog(@"没有网");
      break;
    default:       break;   } }];

##单个文件上传

UploadParam *uploadParam = [[UploadParam alloc] init];
uploadParam.data = UIImagePNGRepresentation([UIImage imageNamed:@"1.png"]);
uploadParam.name = @"1.png";
uploadParam.fileName = @"1.png";
uploadParam.mimeType = @"image/png";

NVNetworking *manager = [NVNetworking shareInstance];
[manager upload:@"/file/upload" parameters:nil uploadParam:uploadParam progress:^(NSProgress *progress) {

  NSLog(@"上传进度: %f", progress.fractionCompleted);
} callback:^(ApiResult *result, id responseObject) {

  NSLog(@"结果: %@", responseObject);

  if (result.success) {

    NSLog(@"回调: %@", result.data);
    NSDictionary *dict = [result.data mj_keyValues];
    NSLog(@"dict: %@", dict);
  } else {

    NSLog(@"失败回调: %@", responseObject);
    NSLog(@"失败code: %i", result.error.code);
  }
}];

##取消上传任务可以用

NVNetworking *manager = [NVNetworking shareInstance];
[manager cancelTaskWithApi:@"/file/upload"];

##多任务上传

UploadParam *uploadParam = [[UploadParam alloc] init];
uploadParam.data = UIImagePNGRepresentation([UIImage imageNamed:@"1.png"]);
uploadParam.name = @"1.png";
uploadParam.fileName = @"1.png";
uploadParam.mimeType = @"image/png";

UploadParam *uploadParam1 = [[UploadParam alloc] init];
uploadParam1.data = UIImagePNGRepresentation([UIImage imageNamed:@"1.png"]);
uploadParam1.name = @"1.png";
uploadParam1.fileName = @"1.png";
uploadParam1.mimeType = @"image/png";

NSArray *array = @[uploadParam, uploadParam1];
NVNetworking *manager = [NVNetworking shareInstance];

[manager upload:@"/file/upload" parameters:nil uploadParams:array progress:^(NSProgress *progress, NSInteger completeCount, NSInteger totalCount, NSInteger failCount, BOOL taskCompleted) {

NSLog(@"progress: %f, completeCount: %li, totalCount: %li, failCount: %li, taskCompleted: %@", progress.fractionCompleted, (long)completeCount, (long)totalCount, (long)failCount, taskCompleted ? @"YES": @"NO");
} callback:^(NSInteger completeCount, NSInteger totalCount, NSInteger failCount, BOOL taskCompleted) {

NSLog(@"completeCount: %li, totalCount: %li, failCount: %li, taskCompleted: %@", (long)completeCount, (long)totalCount, (long)failCount, taskCompleted ? @"YES": @"NO");

}];

##取消多任务上传

NVNetworking *manager = [NVNetworking shareInstance];
[manager cancelUploadFile];

##缓存策略有以下几种

    kReturnCacheDataThenLoad = ,   //有缓存先返回缓存, 并同步请求
    kReloadIgnoringLocalCacheData,  //忽略缓存, 直接请求
    kReturnCacheDataElseLoad,       //有缓存就返回缓存, 没有缓存再请求
    kReturnCacheDataNotLoad         //有缓存就返回缓存, 没有缓存也不请求

##带缓存策略 get请求

/**
 带进度回调 缓存策略的 normal get请求

 @param api api
 @param parameters object参数
 @param cachePolicy 缓存策略
 @param progresss 进度回调
 @param callback 回调方法
 */
- (void)get:(NSString *)api
            parameters:(id)parameters
                cachePolicy:(NVCachePolicy)cachePolicy
                    progress:(ProgressCallback)progresss
                        callback:(NetworkCallback)callback;

##带缓存策略 任务返回的 get请求

/**
/**
 带任务返回 进度回调 缓存策略的 get请求

 @param api api
 @param parameters object参数
 @param cachePolicy 缓存策略
 @param progresss 进度回调
 @param callback 回调方法
 @return 本次请求的task
 */
- (NSURLSessionTask *)nv_get:(NSString *)api
                        parameters:(id)parameters
                            cachePolicy:(NVCachePolicy)cachePolicy
                                progress:(ProgressCallback)progresss
                                    callback:(NetworkCallback)callback;

##带缓存策略的 自定义get请求

/**
 带进度回调的 自定义 带缓存策略的 get请求

 @param api api
 @param parameters object参数
 @param requestSerializer 请求样式
 @param responseSerializer 响应样式
 @param header 请求头数据(字典)
 @param cachePolicy 缓存策略
 @param progresss 进度回调
 @param callback 回调方法
 */
- (void)get:(NSString *)api
            parameters:(id)parameters
                requestSerializer:(AFHTTPRequestSerializer *)requestSerializer
                    responseSerializer:(AFHTTPResponseSerializer *)responseSerializer
                        header:(NSDictionary *)header
                            cachePolicy:(NVCachePolicy)cachePolicy
                                progress:(ProgressCallback)progresss
                                    callback:(NetworkCallback)callback;

##带任务返回 缓存策略的 自定义get请求

/**
 带任务返回 进度回调 缓存策略的 自定义 get请求

 @param api api
 @param parameters object参数
 @param requestSerializer 请求样式
 @param responseSerializer 响应样式
 @param header 请求头数据(字典)
 @param cachePolicy 缓存策略
 @param progresss 进度回调
 @param callback 回调方法
 @return 本次请求的task
 */
- (NSURLSessionTask *)nv_get:(NSString *)api
                  parameters:(id)parameters
           requestSerializer:(AFHTTPRequestSerializer *)requestSerializer
          responseSerializer:(AFHTTPResponseSerializer *)responseSerializer
                      header:(NSDictionary *)header
                 cachePolicy:(NVCachePolicy)cachePolicy
                    progress:(ProgressCallback)progresss
                    callback:(NetworkCallback)callback;

基于AFN封装的带缓存的网络请求的更多相关文章

  1. 基于RxJava2+Retrofit2简单易用的网络请求实现

    代码地址如下:http://www.demodashi.com/demo/13473.html 简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封装 ...

  2. BLOCK封装带菊花的网络请求

    #import <Foundation/Foundation.h> @class HttpRequestManager; typedef void(^httpRequestBlock) ( ...

  3. 第六十二篇、AFN3.0封装网络请求框架,支持缓存

    1.网络请求 第一种实现方式: 功能:GET POST 请求 缓存逻辑: 1.是否要刷新本地缓存,不需要就直接发起无缓存的网络请求,否则直接读取本地数据 2.需要刷新本地缓存,先读取本地数据,有就返回 ...

  4. iOS开发--基于AFNetWorking3.0的图片缓存分析

    图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...

  5. Delphi中带缓存的数据更新技术

    一. 概念 在网络环境下,数据库应用程序是c/s或者是多层结构的模式.在这种环境下,数据库应用程序的开发应当尽可能考虑减少网络数据传输量,并且尽量提高并发度.基于这个目的,带缓存的数据更新技术应运而生 ...

  6. 一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了

    在前面已经初步封装了一个MVP的网络请求框架,那只是个雏形,还有很多功能不完善,现在进一步进行封装.添加了网络请求时的等待框,retrofit中添加了日志打印拦截器,添加了token拦截器,并且对Da ...

  7. 在 JS 中使用 fetch 更加高效地进行网络请求

    在前端快速发展地过程中,为了契合更好的设计模式,产生了 fetch 框架,此文将简要介绍下 fetch 的基本使用. 我的源博客地址:http://blog.parryqiu.com/2016/03/ ...

  8. Android 网络请求详解

    我们知道大多数的 Android 应用程序都是通过和服务器进行交互来获取数据的.如果使用 HTTP 协议来发送和接收网络数据,就免不了使用 HttpURLConnection 和 HttpClient ...

  9. 最简单的iOS网络请求

    做iOS开发,说到网络请求,大家可能都不约而同的提到AFN,可以说大家的网络请求都是用AFN封装而成,AFN的强大易用的确很好. 但是版本升级就会出现一些问题,所以就自己基于iOS原生封装了一个网络请 ...

随机推荐

  1. MySQL wamp密码修改

    WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车 ...

  2. C#判断PC是否支持触摸屏

    C#判断PC是否支持触摸屏 添加引用PresentationFrameworkSystem.Windows.SystemParameters.IsTabletPC 使用win32api [csharp ...

  3. 使用System Sound Services 播放音效(最简单,比较底层),调用AudioServicesPlaySystemSound()

    1.适用范围:一些很小的提示或警告音频. 2.使用限制: 声音长度不能超过30秒 声音文件必须是PCM或IMA4(IMA/ADPCM)格式.(有时候可播放一些特殊的.mp3) 打包成.caf..aif ...

  4. singleTask, singleInstance使用心得

    1. singleTask, singleInstance 共同点: 1)  一旦入栈,都为于栈底. 2) 全栈有且只有一个activity实例对象. 2. singleTask, singleIns ...

  5. Jquery animate的使用方法

    js: $('#colspan').click(function () { if ($('#colspan').hasClass('glyphicon-chevron-up')) { $('#cols ...

  6. 把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

    从VS2010开始ATL ActiveX支持IObjectSafety接口,所以用VS2010来编写,新建一个ATL项目 向导的第一页没什么东西,直接下一步,选项可以根据具体需求调整 点“完成”,切换 ...

  7. QTableWidget的用法总结

    在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和喜欢上了它.再使用QTableWidget的时候,已不像刚开始使用时的迷茫.嗯嗯.现在就来总结总结我与QTable ...

  8. 判断DataTable某一列是否是时间列

    DataTable dt = new DataTable("Table0"); dt.Columns.Add("column0", System.Type.Ge ...

  9. airflow1.10时区修改

    https://blog.csdn.net/crazy__hope/article/details/83688986

  10. Python练手例子(5)

    25.求1+2!+3!+...+20!的和. 程序分析:此程序只是把累加变成了累乘. #python3.7 n = 0 s = 0 t = 1 for n in range(1, 21): t *= ...