Android Retrofit2&OkHttp3添加统一的请求头Header
来源:互联网 发布:zgmf x20a 淘宝 编辑:程序博客网 时间:2024/05/19 12:18
在使用Retrofit时,有时候需要设置Set-Cookie等请求头,如果每一个url都需要,那么直接来个拦截器就好了。
官方说明:
- OkHttp3下OkHttpClient的 List< Interceptor> interceptors()方法,返回的是一个不可编辑的列表,如果对其进行编辑会报出UnSupportedOperationException
- Interceptor的典型使用场景,就是对request和response的Headers进行编辑
如下图所示:
注意Header头,不要照抄,要灵活运用。
让所有网络请求都附上你的 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); }};
为OkHttpClient 添加两个以上的拦截器,如下代码所示:
public class RestDataSource implements Repository { private final MarvelService mMarvelService; @Inject public RestDataSource() { // Log信息 HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC); // 公私密匙 MarvelSigningInterceptor signingInterceptor = new MarvelSigningInterceptor( BuildConfig.MARVEL_PUBLIC_KEY, BuildConfig.MARVEL_PRIVATE_KEY); // OkHttp3.0的使用方式 OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(signingInterceptor) .addInterceptor(loggingInterceptor) .build(); // 选择人物信息 Gson customGsonInstance = new GsonBuilder() .registerTypeAdapter(new TypeToken<List<AvengersCharacter>>() { }.getType(), new MarvelResultsDeserializer<AvengersCharacter>()) .create(); // 适配器 Retrofit marvelApiAdapter = new Retrofit.Builder() .baseUrl(MarvelService.END_POINT) .addConverterFactory(GsonConverterFactory.create(customGsonInstance)) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(client) .build(); // 服务 mMarvelService = marvelApiAdapter.create(MarvelService.class); } // 返回人物信息 @Override public Observable<List<AvengersCharacter>> getCharacters(int currentOffset) { return mMarvelService.getCharacters(currentOffset); }}
下面来个完整的配置:
import okhttp3.Interceptor;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import retrofit2.Retrofit;public class RetrofitAPIManager { public static final String SERVER_URL = "url"; public static ClientAPI provideClientApi() { Retrofit retrofit = new Retrofit.Builder() .baseUrl(SERVER_URL) .client(genericClient()) .build(); return retrofit.create(ClientAPI.class); } public static OkHttpClient genericClient() { OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request() .newBuilder() .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") .addHeader("Accept-Encoding", "gzip, deflate") .addHeader("Connection", "keep-alive") .addHeader("Accept", "*/*") .addHeader("Cookie", "add cookies here") .build(); return chain.proceed(request); } }) .build(); return httpClient; }}
5 0
- Android Retrofit2&OkHttp3添加统一的请求头Header
- Android Retrofit2&OkHttp3添加统一的请求头Header
- Android Retrofit2&OkHttp3添加统一的请求头Header
- Android Retrofit2&OkHttp3添加统一的请求头Header
- Android Retrofit2&OkHttp3添加统一的请求头Header
- Android 给Retrofit2和OkHttp3添加统一的请求头Header
- Android Retrofit2 动态(静态)添加请求头Header
- Retrofit2 + OkHttp3下统一设置Http请求的Headers
- Retrofit2 + OkHttp3下统一设置Http请求的Headers
- 关于Retrofit2+Okhttp3实现统一添加请求参数和重定向
- Retrofit2.0的使用之添加请求头
- Retrofit2.0添加Header的方法总结
- android RxJava+Retrofit2.0 OkHttp添加日志拦截器和设置请求头
- curl get请求添加header头信息
- Retrofit2.0请求添加头信息,以及解析成DAO
- Retrofit2 封装统一请求参数
- android 积累okhttp3与retrofit2常见的使用方法
- Android Retrofit2+okhttp3详细配置,解决URL乱码的问题。
- 如何使用统一的公式表示二进制的补码
- Xcode 4.5下svn客户端使用指南
- 问题解决:psql: could not connect to server: No such file or directory Is the server running
- Xcode4.2+SVN代码管理研究(二)
- 低代码平台,到底能给企业带来什么?
- Android Retrofit2&OkHttp3添加统一的请求头Header
- 网易视频云:用Nginx搭建flv,mp4,hls流媒体服务
- TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)
- Xcode4.2+SVN代码管理研究(一)
- osx修改hosts
- iOS打包导出iPa四个选项意义
- jstl标签库<c:if>和<c:choose>区别
- 程序员有趣的面试智力题
- android app热更新方案探讨(一)