您的位置:首页 > 理论基础 > 计算机网络

iOS——网络请求(原生)

2017-07-27 00:00 218 查看
新建继承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{

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: