您的位置:首页 > 理论基础 > 计算机网络

Android Retrofit2&OkHttp3添加统一的请求头Header

2017-07-20 10:57 363 查看


在使用Retrofit时,有时候需要设置Set-Cookie等请求头,如果每一个url都需要,那么直接来个拦截器就好了.

让所有网络请求都附上你的 token:

Interceptor mTokenInterceptor = new Interceptor() {
@Override public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
if (Your.sToken == null || alreadyHasAuthorizationHeader(originalRequest)) {
return chain.proceed(originalRequest);
}
Request authorised = originalRequest.newBuilder()
.header("Authorization", Your.sToken)
.build();
return chain.proceed(authorised);
}
};


完整用法:

public class HttpUtils {

private String token = null;
private static HttpUtils self = new HttpUtils();

private HttpUtils() {
}

public static HttpUtils getInstance() {
return self;
}

public <T> T createRequest(Class<? extends T> t) {
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd hh:mm:ss")
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BaseConstant.BASE_REQUEST_URL)
.client(genericClient())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
return retrofit.create(t);
}

//统一拦截器
private OkHttpClient genericClient() {
UserModel user = (UserModel) ACache.getAsObject("user");
if (user == null) {
token = "";
} else {
token = user.getToken();
}
return new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("Authorization", token)
.build();
return chain.proceed(request);
}
})
.build();
}

public MultipartBody.Part createMultipartBody(String key, String fileName, File source) {
RequestBody file = RequestBody.create(MediaType.parse(BaseConstant.APPLICATION_OCTET_STREAM), source);
return MultipartBody.Part.createFormData(key, fileName, file);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: