原理是使用OkHttp3里面的Interceptor攔截請求。
實例代碼如下:
第一步,創建一個OkHttp3攔截器:
public class MyInterceptor implements Interceptor {
@NotNull
@Override
public Response intercept(@NotNull Chain chain) throws IOException {
Request request = chain.request();
Request.Builder newRequestBuilder = request.newBuilder();
//為Header設置公共參數
newRequestBuilder.addHeader("token", "123456");
//為Url設置公共參數
HttpUrl url = request.url().newBuilder().addQueryParameter("token", "123456").build();
newRequestBuilder.url(url);
RequestBody body = request.body();
//為Post表單請求設置公共參數
if (body instanceof FormBody) {
FormBody formBody = (FormBody) body;
FormBody.Builder formBodyBuilder = new FormBody.Builder();
for (int i = 0; i < formBody.size(); i++) {
formBodyBuilder.addEncoded(formBody.encodedName(i), formBody.encodedValue(i));
}
//公共參數設置處
formBodyBuilder.add("token", "123456");
newRequestBuilder.post(formBodyBuilder.build());
} else if (body instanceof MultipartBody) {
MultipartBody multipartBody = (MultipartBody) body;
MultipartBody.Builder newMultipartBodyBuilder = new MultipartBody.Builder();
//公共參數設置處
newMultipartBodyBuilder.addPart(Headers.of("Content-Disposition: form-data; name=\"token\""), RequestBody.create("123456", null));
//或者
newMultipartBodyBuilder.addFormDataPart("token", "123456");
for (int i = 0; i < multipartBody.size(); i++) {
MultipartBody.Part part = multipartBody.part(i);
newMultipartBodyBuilder.addPart(part);
}
newRequestBuilder.post(multipartBody);
}
return chain.proceed(newRequestBuilder.build());
}
}
第二步,創建OkHttpClient實例並設置攔截器:
retrofit = new Retrofit.Builder()
.client(new OkHttpClient.Builder().addInterceptor(new MyInterceptor()).build())
.baseUrl("http://apis.juhe.cn/").build();