创建BaseUrlInterceptor.java文件
import android.util.Log;
import java.io.IOException;
import java.util.List;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
public class BaseUrlInterceptor implements Interceptor {
public static String baseUrl = "https://192.168.1.1/";
@Override
public Response intercept(Chain chain) throws IOException {
//获取request
Request request = chain.request();
//从request中获取原有的HttpUrl实例oldHttpUrl
HttpUrl oldHttpUrl = request.url();
//获取request的创建者builder
Request.Builder builder = request.newBuilder();
//从request中获取headers,通过给定的键url_name
//如果有这个header,先将配置的header删除,因此header仅用作app和okhttp之间使用
builder.removeHeader("urlname");
//匹配获得新的BaseUrl
HttpUrl newBaseUrl = null;
Log.e("Url", "intercept: "+oldHttpUrl.toString());
newBaseUrl = HttpUrl.parse(baseUrl);
//重建新的HttpUrl,修改需要修改的url部分
HttpUrl newFullUrl = oldHttpUrl
.newBuilder()
.host(newBaseUrl.host())//更换主机名
.port(newBaseUrl.port())//更换端口
.build();
//重建这个request,通过builder.url(newFullUrl).build();
// 然后返回一个response至此结束修改
Log.e("Url", "intercept: "+newFullUrl.toString());
return chain.proceed(builder.url(newFullUrl).build());
}
}
调用地址
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cache(cache)
.addInterceptor(loggingInterceptor)
.addInterceptor(new BaseUrlInterceptor()) //调用自己写的拦截器
.connectTimeout(7, TimeUnit.SECONDS)
.readTimeout(7, TimeUnit.SECONDS)
.writeTimeout(7, TimeUnit.SECONDS)
.build();