创建一个拦截器
判断当前API使用哪个域名
MoreBaseUrlInterceptor
public class MoreBaseUrlInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
//获取原始的originalRequest
Request originalRequest = chain.request();
//获取老的url
HttpUrl oldUrl = originalRequest.url();
//获取originalRequest的创建者builder
Request.Builder builder = originalRequest.newBuilder();
//获取头信息的集合如:
List<String> urlnameList = originalRequest.headers("urlname");
if (urlnameList != null && urlnameList.size() > 0) {
//删除原有配置中的值,就是namesAndValues集合里的值
builder.removeHeader("urlname");
//获取头信息中配置的value,如:v2或者v3
String urlname = urlnameList.get(0);
HttpUrl baseURL=null;
//根据头信息中配置的value,来匹配新的base_url地址
if ("v2".equals(urlname)) {
baseURL = HttpUrl.parse(API.BASE_v2);
} else{
baseURL = HttpUrl.parse(API.BASE_v3);
}
//重建新的HttpUrl,需要重新设置的url部分
HttpUrl newHttpUrl = oldUrl.newBuilder()
.scheme(baseURL.scheme())//http协议如:http或者https
.host(baseURL.host())//主机地址
.port(baseURL.port())//端口
.build();
//获取处理后的新newRequest
Request newRequest = builder.url(newHttpUrl).build();
return chain.proceed(newRequest);
}else{
return chain.proceed(originalRequest);
}
}
}
API接口
通过heades的方式(key,value) 给API进行标识
拦截器类中 会判断value是v2 还是 v3
//首页接口
@Headers("urlname:v2")
@GET("index")
Observable<HomePageBean> homepage(@QueryMap HashMap<String, String> map);
//升级SVIP
@Headers("urlname:v3")
@GET("v3/items")
Observable<UpgradeSVipBean> upgradesvip(@QueryMap HashMap<String, String> map);
API域名
public class API {
public final static String BASE_v2 = "http://xxx";
public final static String BASE_v3 = "http://xxxx";
}
在okhttp网络请求中添加
.addInterceptor(new MoreBaseUrlInterceptor())