如何使用ok Http添加多个标头

时间:2016-03-01 16:41:40

标签: android okhttp retrofit2

我正在使用Retrofit 2和Okhttp作为我的android项目。我想在api请求中添加多个标头。

这是我的拦截器代码:

public class NetworkInterceptors implements Interceptor {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {

    Request request = chain.request().newBuilder()
            .addHeader("Userid", "10034")
            .addHeader("Securitykey", "Fb47Gi")
            .build();
    return chain.proceed(request);
    }
}

这不能正常工作。在服务器端,我只获得最后添加的标题(在上面的例子中我只得到Securitykey缺失" Userid")

请帮助。

2 个答案:

答案 0 :(得分:3)

感谢您的支持 我找到了答案,这对我来说很好用

public class NetworkInterceptors implements Interceptor {
    @Override
    public Response intercept(Interceptor.Chain chain) throws IOException {

        Request request = chain.request();
        Request newRequest;

        newRequest = request.newBuilder()
                .addHeader("Userid", "10034")
                .addHeader("Securitykey", "Fb47Gi")
                .build();
        return chain.proceed(newRequest);
    }
}

答案 1 :(得分:0)

如果用户已经登录,则可以使用该类在该类中传递上下文。

  public class ApiClient {
        public static final String BASE_URL = "";
        private static Retrofit retrofit = null;
        static Context mcontext;

        public static Retrofit getClient(Context context,String baseUrl)
        {

            mcontext = context;

            OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .connectTimeout(220, TimeUnit.SECONDS)// Set connection timeout
                    .readTimeout(220, TimeUnit.SECONDS)// Read timeout
                    .writeTimeout(220, TimeUnit.SECONDS)// Write timeout
                    .addInterceptor( HeaderInterceptor() )

                  //  .addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)// Add cache interceptor
                   // .cache(cache)// Add cache
                    .build();

            Gson gson = new GsonBuilder()
                    .setLenient()
                    .create();
            if (retrofit == null) {
                retrofit = new Retrofit.Builder()
                        .baseUrl(baseUrl)
                        .client(okHttpClient)
                        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                        .addConverterFactory(GsonConverterFactory.create(gson))
                        .build();
            }
            return retrofit;
        }

        private static Interceptor HeaderInterceptor() {
            return new Interceptor() {
                @Override
                public okhttp3.Response intercept(Chain chain) throws IOException {
                    okhttp3.Request request = chain.request();
                    if(SharedPreference.getlogin(mcontext).equals("")){
                        request = request.newBuilder()
                                .addHeader("Accept", "application/json")
                                .addHeader("Authorization", "Bearer "+SharedPreference.gettoken(mcontext))
                                .build();
                    }
                    else {
                        request = request.newBuilder()
                                .addHeader("Accept", "application/json")
                                .build();
                    }


                    okhttp3.Response response = chain.proceed(request);
                    return response;
                }
            };
        }


    }