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

25人阅读 评论(0) 收藏 举报
分类:

在使用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);
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

为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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

下面来个完整的配置:

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;
    }
}
查看评论

基于ABP添加一个简单的功能

-
  • 1970年01月01日 08:00

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

在使用Retrofit时,有时候需要设置Set-Cookie等请求头,如果每一个url都需要,那么直接来个拦截器就好了。如下图所示:注意Header头,不要照抄,要灵活运用。让所有网络请求都附上你的 ...
  • jdsjlzx
  • jdsjlzx
  • 2016-06-03 13:36:22
  • 51112

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

本文原创作者:一叶飘舟 作者博客地址:http://blog.csdn.net/jdsjlzx在使用Retrofit时,有时候需要设置Set-Cookie等请求头,如果每一个url都需要,那么直接来个...
  • wapchief
  • wapchief
  • 2017-08-17 10:36:09
  • 420

webview添加请求头

webview添加请求头//添加请求头 private Map extraHeaders; extraHeaders = new HashMap(); extraHeaders...
  • Cyx77520
  • Cyx77520
  • 2016-11-22 11:03:11
  • 3874

Picasso加载图片添加请求头addHeader

picasso是Android图片加载强大的第三方库,用法非常简单Picasso.with(this).load(imageUrl).into(imageView);...
  • guowang_wei
  • guowang_wei
  • 2016-01-18 15:23:09
  • 1478

xutils的bitmapUtils添加请求头

1.通过阅读源码bitmapUtils请求的通过URLConncetion进行联网请求;       2.通过重写Downloader类     3.给bitmaputils设置downloade...
  • u010015108
  • u010015108
  • 2016-10-17 11:27:01
  • 495

Volley添加header发送请求

首先科普一下,header里面包括cookies。   我们在实际开发中经常会需要带cookies或者是带token发送请求(PS:看你们服务器怎么定义),如果使用volley的同学就会发现voll...
  • lirenhua_java
  • lirenhua_java
  • 2016-08-11 23:19:31
  • 2565

Android Retrofit2 动态(静态)添加请求头Header

Retrofit提供了两个两种定义HTTP请求头字段的方法即静态和动态。静态头不能改变为不同的请求,头的键和值是固定的且不可改变的,随着程序的打开便已固定。动态添加@Header@GET("/") C...
  • jdsjlzx
  • jdsjlzx
  • 2016-09-06 19:43:01
  • 12742

android webview内的post请求(点击按钮)添加header行不通

处理WebView中的非超链接请求(如Ajax请求):  有时候需要加上请求头,但是非超链接的请求,没有办法再shouldOverrinding中拦截并用webView.loadUrl(Stri...
  • u011127787
  • u011127787
  • 2014-11-12 13:53:17
  • 7353

Android WebView 如何给资源请求添加请求头

通过WebView.loadUrl(url,map)可以在访问这个url的初步请求时,webview会加上请求头,但在png,css等资源文件时,无法添加,这让我在通过代理来访问这个url时,无法加载...
  • luofu7782
  • luofu7782
  • 2017-01-02 09:03:49
  • 1521
    个人资料
    持之以恒
    等级:
    访问量: 26万+
    积分: 1万+
    排名: 1790