iOS基础之网络请求相关
1、AFNetwork二次封装方法一:
#import <Foundation/Foundation.h> @interface BeeNetworkManager : NSObject /**
* POST网络请求
* 每个请求都添加公共参数
*/
+ (void)POSTWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *error))fail; /**
* GET网络请求
*/
+ (void)GETWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *error))fail; @end
#import "BeeNetworkManager.h"
#import "AFNetworking.h" @interface BeeNetworkManager () @end @implementation BeeNetworkManager + (void)POSTWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *error))fail
{
// SDK封装
NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.protocolClasses = @[[ICG_SDK protolClass]];
AFHTTPSessionManager* sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:nil sessionConfiguration:configuration]; [sessionManager.tasks makeObjectsPerformSelector:@selector(cancel)]; NSString *urlStr = [BASE_URL stringByAppendingString:urlString]; if (parameters == nil) {
parameters = [NSMutableDictionary dictionary];
}
// 添加公共参数
parameters = [self addPublicParametersWithDictionary:parameters]; [sessionManager POST:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
success(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(error);
}];
} + (void)GETWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *error))fail
{
// SDK封装
NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.protocolClasses = @[[ICG_SDK protolClass]];
AFHTTPSessionManager* sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:nil sessionConfiguration:configuration];
sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; [sessionManager.tasks makeObjectsPerformSelector:@selector(cancel)]; NSString *urlStr = [BASE_URL stringByAppendingString:urlString]; if (parameters == nil) {
parameters = [NSMutableDictionary dictionary];
}
parameters = [self addPublicParametersWithDictionary:parameters]; [sessionManager GET:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
success(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(error);
}];
} /*---------- 公共参数 ----------*/
+ (NSMutableDictionary *)addPublicParametersWithDictionary:(NSMutableDictionary *)parameters
{
return parameters;
} @end
2、AFNetwork二次封装方法二:
#import "AFHTTPSessionManager.h" @interface BeeCustomNetworkManager : AFHTTPSessionManager @end
#import "BeeCustomNetworkManager.h" @implementation BeeCustomNetworkManager + (instancetype)manager
{
return [[self alloc] initWithBaseURL:nil];
} - (instancetype)init
{
return [self initWithBaseURL:nil];
} - (instancetype)initWithBaseURL:(NSURL *)url
{
// SDK封装
NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.protocolClasses = @[[ICG_SDK protolClass]];
return [self initWithBaseURL:url sessionConfiguration:configuration];
} - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters progress:(void (^)(NSProgress * _Nonnull))uploadProgress success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
{
// 拼接URL
NSString *urlStr = [BASE_URL stringByAppendingString:URLString];
// 设置公共参数
if (parameters == nil) {
parameters = [NSMutableDictionary dictionary];
}
parameters = [self addPublicParametersWithDictionary:parameters]; return [super POST:urlStr parameters:parameters progress:uploadProgress success:success failure:failure];
} - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters progress:(void (^)(NSProgress * _Nonnull))downloadProgress success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
{
// 拼接URL
NSString *urlStr = [BASE_URL stringByAppendingString:URLString];
// 设置公共参数
if (parameters == nil) {
parameters = [NSMutableDictionary dictionary];
}
parameters = [self addPublicParametersWithDictionary:parameters]; return [super GET:urlStr parameters:parameters progress:downloadProgress success:success failure:failure];
} /*---------- 公共参数 ----------*/
- (NSMutableDictionary *)addPublicParametersWithDictionary:(NSMutableDictionary *)parameters
{
return parameters;
}
3、网络请求取消相关:
取消请求:两种取消请求方式
// 取消之前的所有请求,manager 还可以发请求
[self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
// 取消请求后,manager 再也不可用发请求了
[self.manager invalidateSessionCancelingTasks:YES];
iOS基础之网络请求相关的更多相关文章
- iOS美丽约网络请求分析
网络请求分析html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padd ...
- iOS基础 - 第三方网络框架
一.iOS网络层次结构 基于iOS提供API实现上传文件和断点续传的思路 常用iOS第三方网路框架简介 AFNetworking(AFN) ASIHTTPRequest(ASI) 另外一个常用框架 S ...
- iOS 串行网络请求。。。待研究
nsurlsession 和 nsurlconnection 能实现吗? 手动实现的关键点在哪里? 我这里说的串行网络请求,指的是第一个网络请求不返回数据,第二个网络请求就不能开始. AFNetwor ...
- ios编程之网络请求
网络请求有GET请求和POST请求,get和post实现的时候可以选择同步或者异步实现.看一个请求是GET还是POST就看网址后面有没有携带请求体. GET与POST 区别 1.get请求 请求的网 ...
- iOS中的网络请求 和 网络监测
1.网络监测 //根据主机名判断网络是否连接 Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu ...
- iOS开发之网络请求(基于AFNetworking的再封装)
最近一直很忙也没有什么时间写博客了.放假了休息一下,就写一篇博客来总结一下最近做项目中出现过的问题吧!!! 首先,在项目中我的起到了什么作用,无非就是把美工(UI设计师)给我们的图显示出来,然后再和服 ...
- ios中封装网络请求类
#import "JSNetWork.h" //asiHttpRequest #import "ASIFormDataRequest.h" //xml 的解析 ...
- iOS -读书笔记-网络请求
知道"3次握手"吗?突然想起这个词 什么是3次握手? TCP三次握手/四次挥手详解 这里是3次握手的详解 3次握手就是为了可靠的传送数据,TCP(什么是TCP呢?TCP就是一种可靠 ...
- iOS基础之Xcode 8相关
1.屏蔽日志输出 2.注释相关 注释不能使用:命令运行: sudo /usr/libexec/xpccachectl VVDocument方式注释快捷键:option + command + /
随机推荐
- Python全栈开发day5
一.lambda表达式 对于简单的函数,存在一种简便的表示方式,即:lambda表达式 1 2 3 >>> shaw = lambda x,y:x + y >>> ...
- 第十二课:Sizzle引擎详解
这篇博客难度太大,跟前端开发其实没什么关系,如果你想成为大牛,那就去了解下吧.如果你还不想,那可以忽略,毕竟面试官也不会问到这里来,因为他也不太懂.呵呵. Sizzle引擎是jQuery的选择器,它大 ...
- Myeclipse中打开接口实现类的快捷键
Myeclipse中打开接口实现类的快捷键-----Ctrl + T Myeclipse中 Open Type快捷键-----Ctrl + Shift + T
- Linux进程间通信之消息队列
本文依据以下思路展开,首先从宏观上阐述消息队列的机制,然后以具体代码为例进一步阐述该机制,最后试着畅想一下该通信机制潜在的应用. 消息队列是在两个不相关进程间传递数据的一种简单.高效方式,她独立于发送 ...
- cookie以及cookie的作用
ios中对cookie操作的两个类分别是:1. NSHTTPCookie 2. NSHTTPCookieStorage,具体的使用在这里就不多说了. 1.什么是Cookie("小甜饼&qu ...
- 处理sevenzipsharp 检查密码函数的Bug
using (SevenZipExtractor extr = new SevenZipExtractor(tbPackagePath.Text, "www.pc6.com")) ...
- 主从LDAP
yum -y install compat-openldap必须得安装这个 1:在主上 备份 cp /etc/openldap/slapd.conf /etc/open ...
- C++的一些小的知识点
1.初始化: 对于内置类型 ]; // 10个未初始化int ](); // 10个值初始化为0的int 对于自定义类型: 只要一调用new,那么编译器不仅仅给它分配内存,还调用它的默认构造函数初始化 ...
- hdu 3579 Hello Kiki (中国剩余定理)
Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- C# 科学计数法转换成数字
/// <summary> /// 判断输入的数是否是科学计数法.如果是的话,就会将其换算成整数并且返回,否则就返回false. /// </summary> /// < ...