给大家分享一个基于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. 转:Android开源项目推荐之「网络请求哪家强」 Android开源项目推荐之「网络请求哪家强」

    转载自https://zhuanlan.zhihu.com/p/21879931 1. 原则 本篇说的网络请求专指 http 请求,在选择一个框架之前,我个人有个习惯,就是我喜欢选择专注的库,其实在软 ...

  4. 安卓开发常用网络请求框架OkHttp、Volley、XUtils、Retrofit对比

    网络请求框架总结1.xutils     此框架庞大而周全,这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以 View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,万一 ...

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

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

  6. 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类

    这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...

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

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

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

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

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

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

随机推荐

  1. hive、impala集成ldap

    1.概要 1.1 环境信息 hadoop:cdh5.10 os:centos6.7 user:root hive.impala已集成sentry 1.2 访问控制权限 这里通过使用openldap来控 ...

  2. gitignore.io-程序猿值得拥有的智能生成gitignore文件的秘密武器

    gitignore.io Create useful .gitignore files for your project by selecting from 360 Operating System, ...

  3. 用java读写ini配置文件

    本文转载地址:       http://www.blogjava.net/silvernapoleon/archive/2006/08/07/62222.html import java.io.Bu ...

  4. python中的数字

    在编程中,通常使用数字来记录游戏得分,表示可视化数据.存储web应用信息等. #运算# 1,基本运算 >>> 2+35>>> 1-2-1>>> 3 ...

  5. 最近用django做了个在线数据分析小网站

    用最近做的理赔申请人测试数据集做了个在线分析小网站. 数据结构,算法等设置都保存在json文件里.将来对这个小破站扩充算法,只修改一下json文件就行. 当然,结果分析还是要加代码的.页面代码不贴了, ...

  6. sql还原(.sql文件还原)

    第一步: 把还原文件直接拖到SQL Server 2012(或者其他版本)里面,这里以MyDB.sql为例

  7. 小K的H5之旅-HTML的基本结构与基本标签

    一.什么是HTML HTML是超文本标签语言,即网页的源码.而浏览器就是翻译解释HTML源码的工具. 二.HTML文档的结构 HTML文档主要包括三大部分:文档声明部分.<head>头部部 ...

  8. 一天搞定CSS: 标签样式初始化(CSS reset)及淘宝样式初始化代码--09

    样式初始化:是指对HTML中某些标签的默认样式进行清除 样式初始化目的: 不同浏览器的默认样式不一样,若不清理,会导致相同的代码在浏览器中解析结果不一样,为了避免这种情况,所以需要进行样式初始化. 代 ...

  9. Ubuntu环境下 matplotlib 图例中文乱码

    最近做了一个最小二乘法的代码编写并用 matplotlib 绘制了一张图,但是碰到了中文乱码问题.简单搜索之后,发现有人总结出了比较好的方案,亲测可行.推荐给大家. 本文前提条件是 已经 安装好 ma ...

  10. C++进阶引导

    1.C++的用途和意义 t0185b047e29feffc26.jpg 总体来说,C++作为一门软件开发语言,它的流行度是在减少的.主要原因在于语言的复杂和灵活导致软件开发成本提高,这体现在开发周期和 ...