Okhttp請求攔截器
1.新建攔截器,實現(xiàn)Interceptor接口
public class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
}
}
2.獲取Request對象
Request original = chain.request();
3.獲取碎连、修改HttpUrl對象
HttpUrl url = original.url();
//獲得url中key值為name的參數(shù)值
String name = url.queryParameter("name");
//添加參數(shù)
HttpUrl newUrl = url.newBuilder()
.addQueryParameter("key","value")
.build();
4.獲取灰羽、修改Body對象
//獲取、添加body參數(shù)
if (original.body() instanceof FormBody){
FormBody oldBody = (FormBody) original.body();
FormBody.Builder bodyBuilder = new FormBody.Builder();
//添加參數(shù)
bodyBuilder.add("key","value");
for (int i = 0; i < oldBody.size(); i ++){
String key = oldBody.encodedName(i);
String value = oldBody.encodedValue(i);
}
}
5.添加請求頭
//獲取破花、修改請求頭
Headers headers = original.headers();
Headers newHeader = headers.newBuilder()
.add("X-Access-Token", MyApplication.getInstance().getToken())
.build();
Request.Builder builder = original.newBuilder()
.headers(newHeader);
6.修改Request對象
Request.Builder builder = original.newBuilder()
.headers(newHeader);
Request request = builder.build();
Response response = chain.proceed(request);
完整攔截器代碼
public class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
HttpUrl url = original.url();
//獲得url中key為name的參數(shù)值
String name = url.queryParameter("key");
//添加參數(shù)
HttpUrl newUrl = url.newBuilder()
.addQueryParameter("key","value")
.build();
//獲取谦趣、添加body參數(shù)
if (original.body() instanceof FormBody){
FormBody oldBody = (FormBody) original.body();
FormBody.Builder bodyBuilder = new FormBody.Builder();
//添加參數(shù)
bodyBuilder.add("key","value");
for (int i = 0; i < oldBody.size(); i ++){
String key = oldBody.encodedName(i);
String value = oldBody.encodedValue(i);
}
}
//獲取、修改請求頭
Headers headers = original.headers();
Headers newHeader = headers.newBuilder()
.add("X-Access-Token", MyApplication.getInstance().getToken())
.build();
Request.Builder builder = original.newBuilder()
.headers(newHeader);
Request request = builder.build();
Response response = chain.proceed(request);
return response;
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者