HTTP 网络请求一般格式 YUQNetwork

来源:互联网 发布:手机屏幕色彩校正软件 编辑:程序博客网 时间:2024/05/24 06:10

将项目里边的代码粘贴出来,记录下。


+YUQNetwork.h

<span style="color:#33CC00;">//发送GET请求</span>+ (void)httpGETWithPath:(NSString *)path             parameters:(NSDictionary *)paraDic                success:(void (^)(NSDictionary *dict))success                failure:(void (^)(NSError *error ))failure;<span style="color:#33CC00;">//发送POST请求</span>+ (void)httpPOSTWithPath:(NSString *)path              parameters:(NSDictionary *)paraDic                 success:(void (^)(NSDictionary *dict))success                 failure:(void (^)(NSError *error ))failure;<span style="color:#33CC00;">//一般的类,基本都是设置参数、路径、调用发送请求方法</span>+ (void)setShowFriend:(NSString *)show_friend              success:(void (^)(NSDictionary *dic))success              failure:(void (^)(NSError *error))failure;



+YUQNetwork.m

//一般的类,基本都是设置参数、路径、调用发送请求方法+ (void)setShowFriend:(NSString *)show_friend              success:(void (^)(NSDictionary *dic))success              failure:(void (^)(NSError *error))failure{    NSDictionary *paraDic = @{@"show_friend":show_friend};    NSString *path = [[YUQService urlConfigs] objectForKey:kUser_SetConf];    if (path.length < 1) {        if (failure) {                        failure([NSError failedConfigReopenError]);        }        return;    }    path = [YUQService commonPartCombineURLString:path andParams:paraDic isGET:NO];        [YUQNetwork httpPOSTWithPath:path                       parameters:paraDic                          success:success                          failure:failure];}//发送POST请求+ (void)httpPOSTWithPath:(NSString *)path              parameters:(NSDictionary *)paraDic                 success:(void (^)(NSDictionary *dict))success                 failure:(void (^)(NSError *error ))failure{    if (!path || path.length<1) {        if (failure) {            YUQDebugLog(@"%s path == nil",__FUNCTION__);            failure([NSError failedConfigReopenError]);        }        return;    }    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:path]];    [httpClient postPath:path              parameters:paraDic                 success:^(AFHTTPRequestOperation *operation, id responseObject) {#if DEBUG                     NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];                     YUQDebugLog(@"Request path: %@",path);                     YUQDebugLog(@"Request responseObject: %@",str);#endif                                          if (!responseObject) {                         YUQDebugLog(@"Http get responseObject is nil ...");                         if (failure) {                             failure([NSError unknowError]);                         }                         return;                     }                                          NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];                                          if (!dic) {                         if (failure) {                             failure([NSError unknowError]);                         }                         return;                     }                                          NSString *code = [dic objectForKey:@"code"];                     if (![code intValue]) {                         if (success) {                             success(dic);                         }                     }                     else                     {                         if (failure) {                             NSString *msgString = [dic objectForKey:@"msg"];                             NSError *error = [NSError errorWithMsg:([msgString isEqual:[NSNull null]] ? @"" : msgString)                                                               code:[code intValue]];                             failure(error);                         }                     }                 }                 failure:^(AFHTTPRequestOperation *operation, NSError *error) {                     if (failure)                     {                         failure([NSError networkError]);                     }                 }];}//发送GET请求+ (void)httpGETWithPath:(NSString *)path             parameters:(NSDictionary *)paraDic                success:(void (^)(NSDictionary *dict))success                failure:(void (^)(NSError *error ))failure{    if (!path || path.length<1) {        if (failure) {            YUQDebugLog(@"%s path == nil",__FUNCTION__);            failure([NSError failedConfigReopenError]);        }        return;    }        AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:path]];    [httpClient getPath:path             parameters:paraDic                success:^(AFHTTPRequestOperation *operation, id responseObject) {                                        #if DEBUG                    NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];                                        YUQDebugLog(@"Request path: %@",path);                    YUQDebugLog(@"Http get responseObject: %@",str);#endif                                        if (!responseObject) {                        if (failure) {                            failure([NSError unknowError]);                        }                        return;                    }                    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];                                        if (!dic) {                        if (failure) {                            failure([NSError unknowError]);                        }                        return;                    }                                        NSString *code = [dic objectForKey:@"code"];                                        if (![code intValue]) {                        if (success) {                            success(dic);                        }                    }                    else                    {                        NSError *err = [NSError errorWithDomain:YUQ_BASE_URL_STR                                                           code:[code intValue]                                                       userInfo:@{NSLocalizedDescriptionKey:[dic objectForKey:@"msg"]}];                        if (failure) {                            failure(err);                        }                    }                }                failure:^(AFHTTPRequestOperation *operation, NSError *error) {                    if (failure) {                        failure([NSError networkError]);                    }                }];}


对于其中的NSError,

[NSError failedConfigReopenError]是#import "NSError+UserError.h",一个类别方法
if (path.length < 1) {        if (failure) {                        failure([NSError failedConfigReopenError]);        }        return;    }


NSError+UserError.h

/** *  网络错误 * *  @return NSError */+ (NSError *)networkError;/** *  获取网络配置失败,请重新启动客户端 * *  @return NSError */+ (NSError *)failedConfigReopenError;/** *  未知错误 * *  @return NSError */+ (NSError *)unknowError;/** *  其它类型错误 * *  @param msgString 错误信息 *  @param code      错误码 * *  @return NSError */+ (NSError *)errorWithMsg:(NSString *)msgString code:(int)code;

NSError+UserError.m

+ (NSError *)networkError{    NSError *error = [NSError errorWithDomain:YUQ_BASE_URL_STR                                         code:ErrorTypeNetworkError                                     userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"YUQ_NetworkErr", nil)}];    return error;}+ (NSError *)failedConfigReopenError{    NSError *error = [NSError errorWithDomain:YUQ_BASE_URL_STR                                         code:ErrorTypeFailedConfigReopenError                                     userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"YUQ_FialedConfigReopenApp", nil)}];    return error;}+ (NSError *)unknowError{    NSError *error = [NSError errorWithDomain:YUQ_BASE_URL_STR                                         code:ErrorTypeUnknowError                                     userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"YUQ_UnknowErr", nil)}];    return error;}+ (NSError *)errorWithMsg:(NSString *)msgString code:(int)code{    if (code == ErrorTypeVerifyFailed)    {        msgString = NSLocalizedString(@"YUQ_Register_VerCodeErr",nil);    }    else if(code == ErrorTypeAlreadyRegistered)    {        //110001        msgString = NSLocalizedString(@"YUQ_Register_AlreadyReg", nil);    }    else if(code == ErrorTypeErrorUsernameOrPassword)    {        //100001        msgString = NSLocalizedString(@"YUQ_Login_Error_User_Or_Password", nil);    }    else if(code == ErrorTypeErrorHavenotRegistered)    {        //110002        msgString = NSLocalizedString(@"YUQ_NetworkHaveNotRegistered", nil);    }    else if(code == ErrorTypeErrorUsernameNotExist)    {        //100002        msgString = NSLocalizedString(@"YUQ_Login_Error_Username", nil);    }    else if(code == ErrorTypeErrorZoneErr)    {        //40000        msgString = NSLocalizedString(@"YUQ_Login_Err_Zone", nil);    }    else if(code == ErrorTypeErrorVersionErr)    {        //40001        msgString = NSLocalizedString(@"YUQ_Login_Err_Version", nil);    }    else if(code == ErrorTypeErrorEventsCycleTime){        //100400        msgString = NSLocalizedString(@"YUQ_Activity_Err_EventsCycleTime", nil);    }    else if(code == ErrorTypeErrorAcitvityAbnormal){        //100401        msgString = NSLocalizedString(@"YUQ_Activity_Err_AcitvityAbnormal", nil);    }    else if(code == ErrorTypeErrorActivityOutdated){        //100402        msgString = NSLocalizedString(@"YUQ_Activity_Err_ActivityOutdated", nil);    }    else if(code == ErrorTypeErrorActivityMustBeCar){        //100403        msgString = NSLocalizedString(@"YUQ_Activity_Err_ActivityMustBeCar", nil);    }    else if(code == ErrorTypeErrorGroupMembersOnly){        //100404        msgString = NSLocalizedString(@"YUQ_Activity_Err_GroupMembersOnly", nil);    }    else    {        if (!msgString || [msgString isKindOfClass:[NSNull class]])        {            return [self networkError];        }    }        NSError *error = [NSError errorWithDomain:YUQ_BASE_URL_STR                                         code:code                                     userInfo:@{NSLocalizedDescriptionKey:msgString}];    return error;}

还用到了配置文件:YUQService

YUQService.h

//url配置+ (NSDictionary *)urlConfigs;//需要签名的请求+ (NSString *)commonPartCombineURLString:(NSString *)URLstring andParams:(NSDictionary *)params isGET:(BOOL)isGET;//GET方法直接拼接需要的参数;POST方法,参数放在post的params里+ (NSString *)commonPartCombineURLString:(NSString *)URLstring andParams:(NSDictionary *)params isGET:(BOOL)isGET needSign:(BOOL)need;//调用网络接口,签名使用排序后的加密字符+ (NSString *)signWithParams:(NSDictionary *)params;+ (NSString *)appVersion;


YUQService.m

#define PATH_IN_DOCUMENTS_DIR(f)    ([NSString stringWithFormat:@"%@/Documents/%@", NSHomeDirectory(),f])#define kURLConfigsFile     @"YUQURLConfigs.plist"#define APP_ID                      @"111"static NSDictionary *_urlConfigs = nil;//url配置+ (NSDictionary *)urlConfigs{    if (!_urlConfigs) {        _urlConfigs = [NSDictionary dictionaryWithContentsOfFile:PATH_IN_DOCUMENTS_DIR(kURLConfigsFile)];    }        return _urlConfigs;}//需要签名的请求+ (NSString *)commonPartCombineURLString:(NSString *)URLstring andParams:(NSDictionary *)params isGET:(BOOL)isGET{    return [YUQService commonPartCombineURLString:URLstring andParams:params isGET:isGET needSign:YES];}//GET方法直接拼接需要的参数;POST方法,参数放在post的params里+ (NSString *)commonPartCombineURLString:(NSString *)URLstring andParams:(NSDictionary *)params isGET:(BOOL)isGET needSign:(BOOL)need{    if (!URLstring) {        return nil;    }        NSRange actionRange = [URLstring rangeOfString:@"?"];    if (actionRange.location > URLstring.length || actionRange.length > URLstring.length) {        return nil;    }    NSString *actionUrlStr = [[[URLstring substringFromIndex:actionRange.location+1] componentsSeparatedByString:@"="] lastObject];        NSMutableString *url = [NSMutableString stringWithString:URLstring];        if (need) {        NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:params];        [dic setObject:actionUrlStr forKey:@"action"];        NSString *sign = [YUQService signWithParams:dic];        [url appendFormat:@"&%@=%@&%@=%@&%@=%@&%@=%@", @"app_id", APP_ID, @"sign", sign,         @"user_id", [YUQUser currentUser].user_id, @"ver", [YUQService appVersion]];    }    else    {        NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:params];        [dic setObject:actionUrlStr forKey:@"action"];        [url appendFormat:@"&%@=%@&%@=%@", @"app_id", APP_ID, @"ver", [YUQService appVersion]];    }        if (isGET) {        NSArray *allKeys = [params allKeys];        for (NSString *key in allKeys) {            [url appendFormat:@"&%@=%@", key, [params objectForKey:key]];        }    }        return url;}//调用网络接口,签名使用排序后的加密字符+ (NSString *)signWithParams:(NSDictionary *)params{    NSMutableDictionary *signDic = [NSMutableDictionary dictionaryWithDictionary:params];    if ([YUQUser currentUser].user_id)//容错    {        [signDic setObject:[YUQUser currentUser].user_id forKey:@"user_id"];    }    [signDic setObject:APP_ID forKey:@"app_id"];    [signDic setObject:[NSString stringWithFormat:@"%@",[YUQService appVersion]]forKey:@"ver"];        NSArray *allSortedKeys = [[signDic allKeys] sortedArrayUsingSelector:@selector(compare:)];    NSMutableString *sign = [NSMutableString stringWithString:@""];        NSString *firstKey = [allSortedKeys objectAtIndex:0];    [sign appendFormat:@"%@=%@", firstKey, [signDic objectForKey:firstKey]];    for (int i = 1; i < allSortedKeys.count; i++) {        NSString *key = [allSortedKeys objectAtIndex:i];        id value = [signDic objectForKey:key];        if ([value isKindOfClass:[NSNull class]]) {            continue;        }                if ([value isKindOfClass:[NSString class]]) {            if ([(NSString *)value length] < 1) {                continue;            }        }                [sign appendFormat:@"&%@=%@", key, value];    }        NSString *token = [YUQUser currentUser].token;    if (token.length > 0) {        [sign appendFormat:@"%@", token];    }        NSString *md5Str = @"";    //md5加密,此处没有配置参数    // md5Str = [sign md5];        return md5Str;    }+ (NSString *)appVersion{    return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];}


其中:

//url配置+ (NSDictionary *)urlConfigs{    if (!_urlConfigs) {        _urlConfigs = [NSDictionary dictionaryWithContentsOfFile:PATH_IN_DOCUMENTS_DIR(kURLConfigsFile)];    }        return _urlConfigs;}
可以配置plist中的url链接


.plist  .pch  文件都需要自己建立





0 0
原创粉丝点击