博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS——网络请求(原生)
阅读量:7102 次
发布时间:2019-06-28

本文共 3348 字,大约阅读时间需要 11 分钟。

hot3.png

新建继承Object类

类.h 

typedef void (^SuccessBlock)(id responseObject);

typedef void(^FailureBlock)(NSString *error);

类 : NSObject

+ (void)getWithURL:(NSString *)url Params:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure;

+ (void)postWithURL:(NSString *)url Params:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure;

 

类.m

@implementation 类

+ (void)getWithURL:(NSString *)url Params:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure{

NSString *urlString = [NSString string];

    if (params) {

        NSString *paramStr = [self dealWithParam:params];

        urlString = [url stringByAppendingString:paramStr];

    }else{

        urlString = url;

    }

NSString *pathURL = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; //URL中的中文转码

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:pathURL]];

request.timeoutInterval = 3;

NSURLSessionDataTask *task = [[NSURLSession sharedSession]  dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response,NSError * _Nullable error) {

dispatch_async(dispatch_get_main_queue(), ^{

if (data) {

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

                success(dict);

}else{

  NSHTTPURLResponse *httpResponse = error.userInfo[@"响应地址"];

if (httpResponse.statusCode != 0) {

NSString *ResponseStr = [self showErrorInfoWithStatusCode:httpResponse.statusCode];

                    failure(ResponseStr);

} else {

                    NSString *ErrorCode = [self showErrorInfoWithStatusCode:error.code];

                    failure(ErrorCode);

                }

            }

});

}];

[task resume];

}

+ (void)postWithURL:(NSString *)url Params:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure{

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];

[request setHTTPMethod:"POST"];

NSString *body = [self stringWithParam:params];

NSData *bodyData = [body dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPBody:bodyData];

request.timeoutInterval = 3;

NSURLSessionTask *task = [[NSURLSession  sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *_Nullable data,NSURLResponse *_Nullable response,NSErrror *_Nullable error){

if(data) {

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

success(dict);

}else {

NSHTTPURLResponse   *httpResponse = error.userInfo[@"响应地址"];

if(httpResponse.statusCode != 0){

NSString *responseStr = [self showErrorWithStatusCode:httpResponse.statusCode];

failure(responseStr);

}else{

NSString *errorCode = [self showErrorWithStatusCode:error.code];

failure(errorCode);

}

}

}];

[task resume];

}

 

+ (NSString *)stringWithParam:(NSDictionary *)param

{

    NSArray *allkeys = [param allKeys];

    NSMutableString *result = [NSMutableString string];

    for (NSString *key in allkeys) {

        NSString *string = [NSString stringWithFormat:@"%@=%@&", key, param[key]];

        [result appendString:string];

    }

    return result;

}

 

+ (NSString *)showErrorIWhthStatusCode:(NSInteger)statusCode{

NSString *messgae = nil;

switch (statusCode) {

case 1:{

message = @"请求成功";

}

break;

case 0:{

message = @"请求失败!";

}

break;

default:{

}

break;

}

return message;

 

}    

转载于:https://my.oschina.net/u/3382458/blog/1490595

你可能感兴趣的文章
mysql里面if方法的使用
查看>>
链接分析算法之:HITS算法
查看>>
上手并过渡到PHP7(5)——轻量级“集合”迭代器-Generator
查看>>
git的配置
查看>>
python2.0_s12_day19_前端结合后端展示客户咨询纪录
查看>>
angular中$location读取url信息
查看>>
POJ1837 Balance[分组背包]
查看>>
防火墙/IDS测试工具Ftester
查看>>
iOS WebSocket
查看>>
Java多线程 -- wait() 和 notify() 使用入门
查看>>
React@16.3 全新的Context API进阶教程
查看>>
区块链开发教程系列【加精】
查看>>
dubbo源码解析(四十一)集群——Mock
查看>>
前端面试问题汇总
查看>>
4.java数组
查看>>
MySQL数据类型优化
查看>>
蚂蚁金服核心技术:百亿特征实时推荐算法揭秘 ...
查看>>
阿里云智能技术战略架构师陈绪:透视2019云计算酣战 ...
查看>>
深度学习要多深,才能读懂人话?|阿里小蜜前沿探索 ...
查看>>
好程序员分享如何看待CSS中BEM的命名方式?
查看>>