赞
踩
创建一个拦截器
判断当前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())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。