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

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