问题:
最近有个急手的问题,TM的移动不知道发什么疯,北京移动网络对我们域名有毒,就是不让我们连接,公司想了一个法子,弄俩个域名,默认的这个域名不能使用的时候切换第二个域名,以防在一次失误发生.
Globals.BASE_URL = "Http://www.baidu.com";
ping(www.baidu.com)
//创建一个转换BaseUrl的拦截器
Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException { //如果默认的url、ping不过去,切换下一个域名
//获取request
Request request = chain.request();
if (!Globals.ISPING) {
//获取request的创建者builder
Request.Builder builder = request.newBuilder();
//从request中获取原有的HttpUrl实例oldHttpUrl
HttpUrl oldHttpUrl = request.url();
HttpUrl newBaseUrl = HttpUrl.parse(Globals.BASE_URL);
//重建新的HttpUrl,修改需要修改的url部分
HttpUrl newFullUrl = oldHttpUrl
.newBuilder()
.scheme(newBaseUrl.scheme())
.host(newBaseUrl.host())
.port(newBaseUrl.port())
.build();
//重建这个request,通过builder.url(newFullUrl).build();
//然后返回一个response至此结束修改
return chain.proceed(builder.url(newFullUrl).build());
} else {
return chain.proceed(request);
}
}
};
补充:大家都知道ping是用来干什么的吧,不明白的小朋友可以百度ping是干嘛的?
//Android端的代码,来判断自己当前所使用的 的域名可不可以ping通过。
public final void ping(String urld) {
String result = null;
try {
String ip = urld;// 除非百度挂了,否则用这个应该没问题(也可以换成自己要连接的服务器地址)
//其中-c 1 是代表次数 -w 1代表的是时间,这里要注意下时间是秒
Process p = Runtime.getRuntime().exec("ping -c 1 -w 1 " + ip);//
// PING的状态
int status = p.waitFor();
if (status == 0) {
result = "successful~";
Globals.ISPING = true;
} else {
result = "failed~ cannot reach the IP address";
Globals.ISPING = false;
}
} catch (IOException e) {
result = "failed~ IOException";
} catch (InterruptedException e) {
result = "failed~ InterruptedException";
} finally {
Log.i("TTT", "result = " + result);
}
}
转载:https://blog.csdn.net/lxj1137800599/article/details/81144583