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 + /
随机推荐
- 选项卡切换:自动定时&主动触发事件
最初学习的是手动触发事件,添加的是onmouseover,其中index是关键,tab标签与现实内容的div索引一一对应,遍历tab标签,当鼠标移动到某标签时,触发对应的内容div显示.for(var ...
- linux 学习6 软件包管理 资料链接
软件包管理 这一章看得比较随意 先大概记点东西. RPM安装很繁琐,因为依赖性,手动安装太麻烦. ______我觉得直接yum在线安装就好了,很直接方便. 但是要特别注意的地方 在用yum升级或者卸载 ...
- sqlite3 转义字符
SqLite数据库的单引号转义是用单引号转义,并不是常用的"/" 参考:http://blog.csdn.net/qingflyer/article/details/6372498 ...
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本: class并没有增加成本,data members直接内含在每一个c ...
- oracle删除users表空间
1.users表空间一般情况下是默认的,需将别的空间设置成默认,再删除users表空间(oracle不允许删除默认空间的). 2.删除表空间的同时会报这样的错:ORA-22868错误.原因:推断应该存 ...
- Tomcat安装及配置教程
工具/原料 Tomcat7.0 eclipse 百度经验:jingyan.baidu.com java环境的配置 1 java环境的配置应该都学过吧,这里简单的讲一下. 下载安装java JDK,注意 ...
- 设置Headers
import urllib import urllib2 url = 'http://www.server.com/login'user_agent = 'Mozilla/4.0 (compatibl ...
- linq andregex
- Reflector.exe 破解注意事项
需要把网络断掉,然后选择手动激活 总结经验:操作步骤要仔细看清,否则会更浪费时间
- 三、HTTP抓包测试
package testHTTP; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStrea ...