linux http 封装,NSURLSession的GET和POST请求的封装

简介:因为在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作。

这里会将其封装起来,方便以后可以通过一个方法实现所有过程。

基本思路:

1.创建一个继承自NSObject的自定义类,用来调用封装的POST和GET方法

2.在自定义类里面创建单例对象创建方法:

87eeae66ae29cccf5da2c1a551ae15e3.gif

+(instancetype)sharedNewtWorkTool

{static id_instance;staticdispatch_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请求方法封装:

87eeae66ae29cccf5da2c1a551ae15e3.gif

-(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:0error:NULL];//如果 obj 能够解析,说明就是 JSON

if (!obj) {

obj=data;

}//成功回调

dispatch_async(dispatch_get_main_queue(), ^{if(success) {

success(obj,response);

}

});

}else //失败

{//失败回调

if(fail) {

fail(error);

}

}

}] resume];

}

GET请求方法封装:

POST请求方法封装:

87eeae66ae29cccf5da2c1a551ae15e3.gif

-(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:0error: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)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"touchesBegan");//创建参数字典

NSMutableDictionary *dict = @{@"username":@"zhangsan",@"password":@"zhang"}.mutableCopy;//一句话发送 GET 请求.

[[CZNetworkTool sharedNewtWorkTool] GETRequestWithUrl:@"http://127.0.0.1/login/login.php" paramaters:dict successBlock:^(id object, NSURLResponse *response) {

NSLog(@"网络请求成功:%@",object);

} FailBlock:^(NSError *error) {

NSLog(@"网络请求失败");

}];

}

一句话发送 GET 请求.

87eeae66ae29cccf5da2c1a551ae15e3.gif 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

NSLog(@"touchesBegan");//创建参数字典

NSMutableDictionary *dict = @{@"username":@"zhangsan",@"password":@"zhang"}.mutableCopy;//一句话发送 GET 请求.

[[CZNetworkTool sharedNewtWorkTool] POSTRequestWithUrl:@"http://127.0.0.1/login/login.php" paramaters:dict successBlock:^(id object, NSURLResponse *response) {

NSLog(@"网络请求成功:%@",object);

} FailBlock:^(NSError *error) {

NSLog(@"网络请求失败");

}];

}

一句话发送POST请求

代码执行结果:

bf44acd535d41af8b6d306408fea7009.png

成功!

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值