iOS——网络请求(原生)
2018-02-27 16:39
274 查看
新建继承Object类
类.h
typedef void (^SuccessBlock)(id responseObject);
typedef void(^FailureBlock)(NSString *error);
@interface 类 : 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{
NS
8fc6
String *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;
}
类.h
typedef void (^SuccessBlock)(id responseObject);
typedef void(^FailureBlock)(NSString *error);
@interface 类 : 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{
NS
8fc6
String *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;
}
相关文章推荐
- iOS原生网络请求使用总结
- iOS 【原生API NSURLConnection 网络请求】
- iOS-原生网络请求
- IOS 原生网络请求
- iOS 原生网络请求封装
- iOS 原生网络请求
- iOS 原生网络请求写法
- iOS——网络请求(原生)
- iOS 原生网络请求
- iOS 【原生API NSURLSession 网络请求(重新弄一份 格式不对!!!!!!!!!!)】
- iOS网络请求浅谈
- iOS使用AFNetworking请求回来的网络数据,不能显示中文, 新建一个分类解决。
- iOS - 合理封装网络请求接口
- ios的网络请求以及jsonModel 和 AFNetworking框架的使用概要
- 十九,iOS对类似alertView弹框进行单例的应用避免在网络请求时重复信息的弹出
- LXNetwork - 基于AF3.0封装的iOS网络请求库
- iOS 网络请求及数据解析
- 【读书笔记】iOS网络-优化请求性能
- iOS 处理多个网络请求的并发的情况
- iOS网络请求GET&POST,同步&异步