iOS AFNetworking各种功能封装类代码

这个封装类包含了GET请求,POST请求,上传图片,上传多张图片,下载图片,判断网络是否可用等功能。

#import <Foundation/Foundation.h>
@interface HttpUtil : NSObject

typedef NS_ENUM(NSInteger, NetworkReachabilityStatus) { NetworkReachabilityStatusUnknown   = -1, NetworkReachabilityStatusNotReachable  = 0, NetworkReachabilityStatusReachableViaWWAN = 1, NetworkReachabilityStatusReachableViaWiFi = 2,
};

// GET请求
+ (void)getWithURLString:(NSString *)URLString
    parameters:(id)parameters
     success:(void (^)(id))success
     failure:(void (^)(NSError * error))failure;

// POST请求
+ (void)postWithURLString:(NSString *)URLString
    parameters:(id)parameters
     success:(void (^)(id))success
     failure:(void (^)(NSError *))failure;
// 上传图片
+ (void)uploadWithURLString:(NSString *)URLString
     parameters:(id)parameters
     uploadData:(NSData *)uploadData
     uploadName:(NSString *)uploadName
     success:(void (^)())success
     failure:(void (^)(NSError *))failure;
// 上传多张图片
+ (void)uploadMostImageWithURLString:(NSString *)URLString
       parameters:(id)parameters
       uploadDatas:(NSArray *)uploadDatas
       uploadName:(NSString *)uploadName
        success:(void (^)())success
        failure:(void (^)(NSError *))failure;
+(void)DownLoadWithUrlString:(NSString *)URLString
     parameters:(id)parameters
     progress:(void (^)(id))progress
      success:(void(^)(NSURL *filePath))success;

+(void)setReachabilityStatusChangeBlock:(void(^)(NetworkReachabilityStatus status))block;
+(void)stopMonitoring;

+(Boolean)JudgeNetisConnect;
@end
#import "HttpUtil.h"
#import "AFNetworking.h"
@implementation HttpUtil
#pragma mark -- GET请求 --
+ (void)getWithURLString:(NSString *)URLString
    parameters:(id)parameters
     success:(void (^)(id))success
     failure:(void (^)(NSError * error))failure {
 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 manager.requestSerializer.timeoutInterval = 10;
 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
 [manager GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  if (responseObject) {
   success(responseObject);
  }
 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  if (error) {
   failure(error);
  }
 }];
}
#pragma mark -- POST请求 --
+ (void)postWithURLString:(NSString *)URLString
    parameters:(id)parameters
     success:(void (^)(id))success
     failure:(void (^)(NSError *))failure {
 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithArray:@[@"POST", @"GET", @"HEAD"]];
 manager.requestSerializer.timeoutInterval = 10;
 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
 [manager POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  if (success) {
   success(responseObject);
  }
 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  if (failure) {
   failure(error);
  }
 }];
}
#pragma mark -- 上传图片 --
+ (void)uploadWithURLString:(NSString *)URLString
     parameters:(id)parameters
     uploadData:(NSData *)uploadData
     uploadName:(NSString *)uploadName
     success:(void (^)())success
     failure:(void (^)(NSError *))failure {
 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
 [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id< AFMultipartFormData > _Nonnull formData) {
  [formData appendPartWithFileData:uploadData name:uploadName fileName:uploadName mimeType:@"image/png"];
 } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  if (success) {
   success(responseObject);
  }
 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  if (failure) {
   failure(error);
  }
 }];
}
// 上传多张图片 uploadDatas 图片的data集合
// uploadName 文件名称 最好以xxx1 xxx2 表示 image1 image2
+ (void)uploadMostImageWithURLString:(NSString *)URLString
       parameters:(id)parameters
       uploadDatas:(NSArray *)uploadDatas
       uploadName:(NSString *)uploadName
        success:(void (^)())success
        failure:(void (^)(NSError *))failure{
 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
 [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id< AFMultipartFormData > _Nonnull formData) {
  for (int i=0; uploadDatas.count; i++) {
   NSString *imageName = [NSString stringWithFormat:@"%@[%i]", uploadName, i];
   [formData appendPartWithFileData:uploadDatas[i] name:uploadName fileName:imageName mimeType:@"image/png"];
  }
 } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  if (success) {
   success(responseObject);
  }
 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  if (failure) {
   failure(error);
  }
 }];
}
+(void)DownLoadWithUrlString:(NSString *)URLString
     parameters:(id)parameters
     progress:(void (^)(id))progress
      success:(void(^)(NSURL *filePath))success
{
 //1.创建管理者对象
 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 URLString=[self DownLoadUrlWithParams:URLString WithNSDictionaryParams:parameters];
 NSLog(@"DownLoadFileUrl %@",URLString);
 NSURL *url = [NSURL URLWithString:URLString];
 //3.创建请求对象
 NSURLRequest *request = [NSURLRequest requestWithURL:url];
 //下载任务
 NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
  if (progress) {
   progress(downloadProgress);
  }
 } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
  //  //下载地址
  //  //设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象
  NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
  filePath=[filePath stringByAppendingPathComponent:@"DFU.zip"];
  return [NSURL fileURLWithPath:filePath];
 } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
  if (success) {
   success(filePath);
  }
 }];
 //开始启动任务
 [task resume];
}
//因为下载的方法不能够直接填写dict参数进去,所以只有使用这种方法拼接参数进去
+(NSString *)DownLoadUrlWithParams:(NSString*)url WithNSDictionaryParams:(NSDictionary *)params{
 // 初始化参数变量
 NSString *body=@"";
 // 快速遍历参数数组
 NSString* appendUrl;
 for(id key in params) {
  NSLog(@"key :%@ value :%@", key, [params objectForKey:key]);
  body = [body stringByAppendingString:key];
  body = [body stringByAppendingString:@"="];
  body = [body stringByAppendingString:[params objectForKey:key]];
  body = [body stringByAppendingString:@"&"];
 }
 // 处理多余的&以及返回含参url
 if (body.length > 1) {
  // 去掉末尾的&
  body = [body substringToIndex:body.length - 1];
  // 返回含参url
 }
 appendUrl=[url stringByAppendingString:body];
 return appendUrl;
}

+(void)setReachabilityStatusChangeBlock:(void(^)(NetworkReachabilityStatus status))block{ //监测网络状态
 AFNetworkReachabilityManager *netMan = [AFNetworkReachabilityManager sharedManager];
 [netMan setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  switch (status) {
    // 未知网络
   case AFNetworkReachabilityStatusUnknown:
    if (block) {
     block(NetworkReachabilityStatusUnknown);
    }
    break;
    // 没有网络
   case AFNetworkReachabilityStatusNotReachable:
    if (block) {
     block(NetworkReachabilityStatusNotReachable);
    }
    break;
    // 手机自带网络
   case AFNetworkReachabilityStatusReachableViaWWAN:
    if (block) {
     block(NetworkReachabilityStatusReachableViaWWAN);    }
    break;
    // WIFI
   case AFNetworkReachabilityStatusReachableViaWiFi:
    if (block) {
     block(NetworkReachabilityStatusReachableViaWiFi);    }
    break;
  }
 }];
 [netMan startMonitoring];}

+(void)stopMonitoring{
 AFNetworkReachabilityManager *netMan = [AFNetworkReachabilityManager sharedManager];
 [netMan stopMonitoring];
}

+(Boolean)JudgeNetisConnect{
 NSString *urlstr=WuCheBaseUrl;
 NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:urlstr]
           cachePolicy:NSURLRequestUseProtocolCachePolicy
          timeoutInterval:5.0];
 NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
 if (response!=NULL) {
  return YES;
 }
 return NO;
}

@end

以上这篇iOS AFNetworking各种功能封装类代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • IOS网络请求之AFNetWorking 3.x 使用详情
  • IOS 使用Block二次封装AFNetworking 3.0详解
  • iOS利用AFNetworking实现文件上传的示例代码
  • iOS 请求权限封装类的实例代码
(0)

相关推荐

  • IOS网络请求之AFNetWorking 3.x 使用详情

    前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前13年做iOS开发时用的ASIHttpRequest开源框架. AFNetWorking AFNetWorking一款轻量级网络请求开源框架,基于iOS和mac os 网络进行扩展的高性能框架,大大降低了iOS开发工程师处理网络请求的难度,让iOS开发变成一件愉快的事情. 下载地址:AFNetwor

  • iOS 请求权限封装类的实例代码

    直接上代码 #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> #import <Photos/Photos.h> #import <CoreLocation/CoreLocation.h> @interface PermissionUtil : NSObject +(Bool

  • IOS 使用Block二次封装AFNetworking 3.0详解

    IOS 使用Block二次封装AFNetworking 3.0详解 现在我们网络请求大都用第三方工具-–AFNetworking: 其中,AFNetworking 3.0 是对 NSURLSession 进行的封装,简化了很多步骤,但是在现实开发中,我们可以将AFNetworking再次封装到一个类中,这样通过传去URL和Parameters 就可以进行网络请求. 具体实现步骤: 前期准备:导入AFNetworking第三方框架 1.新建一个工具类,继承自NSObject: 2.在.h 中宏定义

  • iOS利用AFNetworking实现文件上传的示例代码

    0.导入框架准备工作 1. 将框架程序拖拽进项目 2.  添加iOS框架引用 –SystemConfiguration.framework –MobileCoreServices.framework 3.  引入 #import "AFNetworking.h" 4. 修改xxx-Prefix.pch文件 #import <MobileCoreServices/MobileCoreServices.h> #import <SystemConfiguration/Sys

  • iOS AFNetworking各种功能封装类代码

    这个封装类包含了GET请求,POST请求,上传图片,上传多张图片,下载图片,判断网络是否可用等功能. #import <Foundation/Foundation.h> @interface HttpUtil : NSObject typedef NS_ENUM(NSInteger, NetworkReachabilityStatus) { NetworkReachabilityStatusUnknown = -1, NetworkReachabilityStatusNotReachable

  • iOS AFNetworking中cookie重定向代码

    // 1. 取出需要同步的url (登录请求中返回的重定向地址) BESTHttpItem *httpItem = [BESTHttpHelper sharedHelper].curHttpItem; NSString *url = [NSString stringWithFormat:@"%@/#/login", httpItem.frontend_addr]; // 2. 取出当前的headerFields NSDictionary *headerFields = [NSHTTPC

  • iOS 本地存储NSUserDefaults封装代码

    直接上代码 #import <Foundation/Foundation.h> @interface NSUserDefaultUtil : NSObject +(void)PutDefaults:(NSString *)key Value:(id)value; +(id)GetDefaults:(NSString *)key; @end #import "NSUserDefaultUtil.h" @implementation NSUserDefaultUtil +(vo

  • iOS实现微信/QQ显示最近拍摄图片的功能实例代码

    如果你刚刚拍摄了图片,在使用微信/QQ发生消息时会显示"你可能要发送的图片", 实现原理: 1.打开或重新进入聊天窗口时查询图库最新的照片, 对比拍照时间和当前时间的差,当低于阈值(例如一分钟)时就显示出来. PS:阈值是逻辑上判断是否最近的依据.优点:总能找到最近拍摄的图片: 缺点:每次都要查询图片数据,响应较慢. 2.注册图库变化监听(观察者模式), 响应图库的增删改事件, 拿到变化图片数据后做对应的逻辑. 优点: 实时响应: 缺点:影响性能, 在注册监听前拿不到变化数据. 实现方

  • iOS 增加右侧按钮功能实例代码

    一,工程图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //增加右侧按钮 [self addRightButton]; } #pragma -mark -functions //增加右侧按钮 -(void)addRightButton { UIBarButtonI

  • MUI 上拉刷新/下拉加载功能实例代码

    新闻信息列表必备的功能,支持Table,Ul等列表. 以下是DIV版本,在安卓端或者ios端必须使用双webview模式,传送门:http://dev.dcloud.net.cn/mui/pulldown/ <!--下拉刷新容器--> <div id="pullrefresh" class="mui-content mui-scroll-wrapper"> <div class="mui-scroll"> &l

  • vue loadmore组件上拉加载更多功能示例代码

    最近在做移动端h5页面,所以分页什么的就不能按照传统pc端的分页器的思维去做了,这么小的屏幕去点击也不太方便一般来讲移动端都是上拉加载更多,符合正常使用习惯. 首先简单写一下模板部分的html代码,,很简单清晰的逻辑: <template> <div class="loadmore"> <div class="loadmore__body"> <slot></slot> </div> <d

  • Android图片采样缩放功能实例代码

    为什么要对Android中的图片进行采样缩放呢? 是为了更加高效的加载Bitmap.假设通过imageView来显示图片,很多时候ImageView并没有图片的原始尺寸那么大,这时候把整张图片加载进来后再设给ImageView是没有必要的,因为ImagView并没有办法显示原始的图片. 所以我们可以使用BitmapFactory.Options按照一定的采样率加载缩小后的图片,将缩小后的图片在ImageView中显示,这样就能降低内存占用,在一定程度上避免OOM,提高bitma加载时候的性能.

  • 基于better-scroll 实现歌词联动功能的代码

    BetterScroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件.它的核心是借鉴的 iscroll 的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些 feature 以及做了一些性能优化. BetterScroll 是使用纯 JavaScript 实现的,这意味着它是无依赖的. 正文 前段时间公司要做个歌词标记功能,标记副歌.前奏.无效内容等等.找了找没有找到类似的实现,只能自己实现一把. 功能已经上线了,这里记录一下用到的相关内容

  • AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)

    注:添加球员的功能无指定技术要求,添加球员的页面也无具体样式要求. 1.实现上图页面所有元素,页面布局规整,跟上图效果一致 2.实现文案显示,按效果显示 3.实现查询,实现查询敏感词过滤,实现查询后列表变化 4.实现倒序,实现正序,下拉列表排序效果都实现 5.按钮背景一致,按钮样式 6.实现添加球员页面,添加球员页面样式,添加球员功能,添加球员必填项判断,添加完球员后能显示在表格内,已存在球员判重. 7.表格样式跟上图样式一致 代码: <!DOCTYPE html> <html lang

随机推荐