iOS——網絡請求(原生)

新建繼承Object類app

類.h async

typedef void (^SuccessBlock)(id responseObject);post

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

@interface 類 : NSObjectspa

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

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

 

類.morm

@implementation 類繼承

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

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;

 

}    

相關文章
相關標籤/搜索