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

iOS HTTP网络请求,没有使用框架的request

2017-01-06 14:52 260 查看
   //
数据请求

    [Manager
requestData:@"ji"
params:params handler:^(NSDictionary *info,
NSError *error) {

        if (handler) {

            if ((!error) && ([info
count] > 0)) {

                

            }

            else {

                

            }

            handler(info, error);

        }

    }];

////////////////////////////////////////////////////////////////////////////////////////////////

+ (void)requestData:(NSString *)apiName params:(NSDictionary *)params handler:(void
(^)(NSDictionary *,
NSError *))handler

{

   
// 设置请求

    NSMutableURLRequest *request = [self
createRequest:apiName];

    [request setHTTPMethod:
@"POST"];

    [request setValue:@"application/json"
forHTTPHeaderField:@"Content-Type"];

    

    NSData *jsonData = [NSJSONSerialization
dataWithJSONObject:params
options:NSJSONWritingPrettyPrinted
error:nil];

   

    [request setValue:[NSString
stringWithFormat:@"%lu", (unsigned
long)[jsonData
length]] forHTTPHeaderField:@"Content-Length"];

    [request setHTTPBody:jsonData];

    NSURLSession *session = [NSURLSession
sharedSession];

    [[session dataTaskWithRequest:request
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {

        NSDictionary *info;

        NSError *apiError = error;

        if (data && !error) {

            NSHTTPURLResponse *httpRes = (NSHTTPURLResponse *)response;

            if ([self
checkHttpStatus:httpRes
error:&apiError]) {

             

                NSError *parseError;

                NSDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data

                                                                   
options:NSJSONReadingAllowFragments

                                                                     
error:&parseError];

                if (parseError)

                {

                    apiError = parseError;

                }

                else

                {

                    // 成功

                    info = dic;

                }

            }

        }

        

        if (handler)

        {

            handler(info, apiError);

        }

        

    }] resume];

}

  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

+ (NSMutableURLRequest *)createRequest:(NSString *)apiName

{

    CommonInfo *cmnInfo = [CommonInfo
sharedInstance];

//找到在CommonInfo中设置好的url

    NSString *urlBase = cmnInfo.appSettings.api_url;

    NSString *urlString = [urlBase
stringByAppendingPathComponent:apiName];

    NSURL *url = [NSURL
URLWithString:urlString];

    

   
// request的设置

    NSMutableURLRequest *request = [NSMutableURLRequest

                                    requestWithURL:url

                                    cachePolicy:
NSURLRequestUseProtocolCachePolicy

                                    timeoutInterval:REQUEST_TIMEOUT];

    

   
// cookies的设置

    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage
sharedHTTPCookieStorage];

    if (cookieStorage.cookies.count >
0)

    {

        NSDictionary *header = [NSHTTPCookie
requestHeaderFieldsWithCookies:cookieStorage.cookies];

        [request setAllHTTPHeaderFields:header];

    }

    

    return request;

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

+ (BOOL)checkHttpStatus:(NSHTTPURLResponse *)res error:(NSError *
__autoreleasing *)error

{

    BOOL ret =
NO;

    

   
// 根据HTTP的状态判断是否error

    

    if (res.statusCode ==
200)

    {

        ret = YES;

    }

    else
if (res.statusCode ==
401)

    {

      

        *error = [SWKAPIError
errorWithMessage:SWKAPIErrorSessionTimeout

                                      message:@"TODO:"];

    }

    else

    {

      

    }

    

    return ret;

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