实际项目多个IP地址寻址切换

由于前期宏定义,造成如下代码较多

//获取账户信息
#define lbUserinfoAddress lbBaseApiAddress@"user_info.do"
//下单
#define lbCreatOrderAddress lbBaseApiAddress@"create_order.do"
//撤销订单
#define lbCancelOrderAddress lbBaseApiAddress@"cancel_order.do"

实际部署的服务器在不同的网络线路(联通,移动,长城等)下域名解析还是其他什么原因造成有些线路访问不了,所以这里后台配置了多个域名,在程序中出现请求失败切换线路,目前简单实现是在afnetworking请求失败的回掉里边处理,相对代码改动比较少,侵染也比较小.

就以post举例说明

+(void)requestApiWithMethodPost:(NSString *)url param:(NSMutableDictionary *)param thenSuccess:(void (^)(id  responseObject))success fail:(void (^)(void))fail;
{
    
    NSString *newurL=[url stringByReplacingOccurrencesOfString:NetStatusURLStr withString:@""];
    newurL = [self dealNowIPHostUrlWithUrl:newurL];
    [self showLoadingWithURLStr:newurL];//loading加载图
    AFHTTPSessionManager *manager = [self singleManager];
    [self setLanguageWithAFHTTPSessionManager:manager];
    
    [manager.requestSerializer setValue:@"zh-CN" forHTTPHeaderField:@"accept-language"];
    
    [manager POST:newurL parameters:param progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        id response = [NSJSONSerialization JSONObjectWithData:responseObject options:(NSJSONReadingMutableContainers) error:nil];
        
        dispatch_async(dispatch_get_main_queue(), ^{
            !success ? : success(response);
            [self dealWithResponse:response Url:url Param:param];
        });
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        [self dealWithError:error];//(此处切换ip处理)
        //  [XLUtil showMessage:RDLocalizedString(@"网络错误")];
        dispatch_async(dispatch_get_main_queue(), ^{
            !fail ? : fail();
        });
    }];
}

+(void)dealWithError:(NSError *)error{
    
    [self changeNetworkIpUrlIndex];
    if(error){
        LOG(@"网络错误");
        LOG(@"原始错误信息:%@",error);
    }
    [SVProgressHUD dismiss];
}

#pragma mark -- 切换IP地址
/**处理当前请求的URL*/
+(NSString *)dealNowIPHostUrlWithUrl:(NSString *)urlStr{
    
    if (![urlStr isEqualToString:TestLBURL] &&
        ![urlStr isEqualToString:WLBURL] &&
        ![urlStr isEqualToString:PCLBURL]){
        
        NSURL *URL = [NSURL URLWithString:urlStr];
        NSString *hostStr = URL.host;
        if (![hostStr containsString:@"https"]) {
            hostStr = [NSString stringWithFormat:@"https://%@",hostStr];
        }
        NSString *replaceHostStr = [self getIPHostUrl];
        urlStr = [urlStr stringByReplacingOccurrencesOfString:hostStr withString:replaceHostStr];
    }
    return urlStr;
}

/**获取当前的IP地址*/
+(NSString *)getIPHostUrl{
    
    NSInteger index = [[[NSUserDefaults standardUserDefaults] valueForKey:KNetWorkIpHostIndex] integerValue];
    if (index >= [self urlHostArr].count) {
        index = 0;
    }
    return [NSString stringWithFormat:@"%@",[NetWorking urlHostArr][index]];
}

/**备用的ip地址列表*/
+(NSArray *)urlHostArr{
    return @[
             @"https://xxxx.com",
             @"https://xxxx.com",
             @"xxxxxx",
             ];
}
/**切换IP地址*/
+(void)changeNetworkIpUrlIndex{
    NSInteger index = [[[NSUserDefaults standardUserDefaults] valueForKey:KNetWorkIpHostIndex] integerValue];
    index = index + 1;
    if (index >= [self urlHostArr].count) {
        index = 0;
    }
    [[NSUserDefaults standardUserDefaults] setValue:@(index) forKey:KNetWorkIpHostIndex];
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,040评论 3 119
  • 幸福就是,你刚推开门,它如期扑面而来。 工作就是,你拨开云雾未见天日,一声惊雷却让石破山崩。 嫉妒就是...
    咫尺为邻阅读 903评论 0 0
  • 午睡前就想给她回信息,我不想出去,但又觉得不好意思。拖拖拖,午休也没睡好。直到3点钟才定心回了,结果她也决定不去了...
    J欢愈空间阅读 1,124评论 0 0
  • 风追着风 摇醒每一枚叶子 花儿舒展到夜幕的尽头 木房青瓦飘出的炊烟 染黑了发情的野猫 红嘴绿尾的鸟儿在笑 黄狗竖起...
    拈花一笑qw阅读 2,920评论 0 6
  • 半夜三更,朦胧的雾色牛奶般流满了整个城市。虫鸣在美梦中一阵阵的响起。 一切安然。 我和花辰,也安然的在野外……挖坟...
    瞳粹阅读 1,521评论 1 3