NSURLSession的GET和POST请求的封装
来源:互联网 发布:一彩软件 编辑:程序博客网 时间:2024/05/02 02:56
简介:因为在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作。
之前已经在 http://www.linuxidc.com/Linux/2016-04/129797.htm 介绍如何使用NSURLSession来发送GET请求和POST请求。
这里会将其封装起来,方便以后可以通过一个方法实现所有过程。
基本思路:
1.创建一个继承自NSObject的自定义类,用来调用封装的POST和GET方法
2.在自定义类里面创建单例对象创建方法:
+(instancetype)sharedNewtWorkTool
{
static id _instance;
static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{ _instance = [[self alloc] init];});return _instance;
}
3.封装方法参数说明:
(1)urlString:登录接口字符串
(2)paramaters:请求参数字典 key:服务器提供的接收参数的key. value:参数内容
(3)typedef void(^SuccessBlock)(id object , NSURLResponse *response):成功后回调的block :参数: 1. id: object(如果是 JSON ,那么直接解析 成OC中的数组或者字典.如果不是JSON ,直接返回 NSData) 2. NSURLResponse: 响应头信息,主要是对服务器端的描述
(4)typedef void(^failBlock)(NSError *error):失败后回调的block:参数: 1.error:错误信息,如果请求失败,则error有值
GET请求方法封装:
-(void)GETRequestWithUrl:(NSString )urlString paramaters:(NSMutableDictionary )paramaters successBlock:(SuccessBlock)success FailBlock:(failBlock)fail
{
// 1. 创建请求.
// 参数拼接.// 遍历参数字典,一一取出参数,按照参数格式拼接在 url 后面.NSMutableString *strM = [[NSMutableString alloc] init];[paramaters enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { // 服务器接收参数的 key 值. NSString *paramaterKey = key; // 参数内容 NSString *paramaterValue = obj; // appendFormat :可变字符串直接拼接的方法! [strM appendFormat:@"%@=%@&",paramaterKey,paramaterValue];}];urlString = [NSString stringWithFormat:@"%@?%@",urlString,strM];// 截取字符串的方法!urlString = [urlString substringToIndex:urlString.length - 1];NSLog(@"urlString:%@",urlString);NSURL *url = [NSURL URLWithString:urlString];NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15];// 2. 发送网络请求.// completionHandler: 说明网络请求完成![[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); // 网络请求成功: if (data && !error) { // 查看 data 是否是 JSON 数据. // JSON 解析. id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; // 如果 obj 能够解析,说明就是 JSON if (!obj) { obj = data; } // 成功回调 dispatch_async(dispatch_get_main_queue(), ^{ if (success) { success(obj,response); } }); }else //失败 { // 失败回调 if (fail) { fail(error); } }}] resume];
}
POST请求方法封装:
-(void)POSTRequestWithUrl:(NSString )urlString paramaters:(NSMutableDictionary )paramaters successBlock:(SuccessBlock)success FailBlock:(failBlock)fail
{
// 1. 创建请求.
// 参数拼接.// 遍历参数字典,一一取出参数NSMutableString *strM = [[NSMutableString alloc] init];[paramaters enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { // 服务器接收参数的 key 值. NSString *paramaterKey = key; // 参数内容 NSString *paramaterValue = obj; // appendFormat :可变字符串直接拼接的方法! [strM appendFormat:@"%@=%@&",paramaterKey,paramaterValue];}];NSString *body = [strM substringToIndex:strM.length - 1];NSLog(@"%@",body);NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlString];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15];// 1.设置请求方法:request.HTTPMethod = @"POST";// 2.设置请求体request.HTTPBody = bodyData;// 2. 发送网络请求.// completionHandler: 说明网络请求完成![[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); // 网络请求成功: if (data && !error) { // 查看 data 是否是 JSON 数据. // JSON 解析. id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; // 如果 obj 能够解析,说明就是 JSON if (!obj) { obj = data; } // 成功回调 dispatch_async(dispatch_get_main_queue(), ^{ if (success) { success(obj,response); } }); }else //失败 { // 失败回调 if (fail) { fail(error); } }}] resume];
}
自定义类算是粗略的完成了,接下来就是检验成果的时候:
(void)touchesBegan:(NSSet
- NSURLSession的GET和POST请求的封装
- NSURLSession的GET和POST请求的封装
- NSURLSession的POST请求及封装
- Ajax get请求和post请求的封装
- java使用httpclient封装post请求和get的请求
- 使用NSURLSession发送get和post请求
- Swift的学习(NSURLSession发送get、post请求)
- iOS 原生NSURLSession 简单的 GET、POST 请求
- 封装好的的 get 和 post网络请求
- PHP后台get和post带参请求的封装
- 简单封装Http的Get和Post请求
- Volley中的GET和POST请求工具库的封装
- 简单封装ajax的get和post请求
- 封装OKHttp的get和post请求模版
- Ajax请求GET/POST方法的封装
- Ajax请求GET/POST方法的封装
- OkHttp get post请求的封装
- 根据volley网络请求框架封装好的get请求和post请求
- 由于ndk引发的几个bug,以及解决方法
- android 运行项目闪退
- 自顶向下分治实现的归并算法
- MyBatis Generator 配置
- Nginx之页面缓存
- NSURLSession的GET和POST请求的封装
- 糗事百科交互式爬虫
- iBatis简单入门教程
- 阿里面经之解答 by cmershen(2)——static/final,HashMap/Hashtable/ConcurrentHashMap
- Android中对于TabPageIndicator开源框架的使用
- Hbase API 操作
- 经验分享:CSS浮动(float,clear)通俗讲解
- s3c6410 uboot 修改和过程分析
- 第一篇博文