4

我正在使用Retrofit库版本 2 和OkHttpClient.

我想从所有响应中获取一些标题。

我找到了一种解决方案OkClient

    public class InterceptingOkClient extends OkClient{
    public InterceptingOkClient()
    {
    }

    public InterceptingOkClient(OkHttpClient client)
    {
        super(client);
    }

    @Override
    public Response execute(Request request) throws IOException
    {
        Response response = super.execute(request);

        for (Header header : response.getHeaders())
        {
            // do something with header
        }

        return response;
    }
}

但是,如果我正在使用,我该怎么做OkHttpClient

4

2 回答 2

7

是的,这是一个老问题.. 但仍然找到答案,因为我自己也在寻找类似的问题。

okHttpClient.interceptors().add(new Interceptor() {  
    @Override
    public Response intercept(Interceptor.Chain chain) throws IOException {
        Request original = chain.request();

        // Request customization: add request headers
        Request.Builder requestBuilder = original.newBuilder()
                .header("Authorization", "auth-value"); // <-- this is the important line, to add new header - replaces value with same header name.

        Request request = requestBuilder.build();
        Response response = chain.proceed(request);
        Headers allHeaders = response.headers();
        String headerValue = allHeaders.get("headerName");
        return response;
    }
});

希望这可以帮助!

PS:没有错误处理。

于 2016-07-12T10:23:19.720 回答
-2

您可以为此使用日志记录拦截器。在构建客户端时将其作为拦截器添加到 OkHttpClient 构建器,设置日志级别,瞧!您将获得有关请求和响应的所有信息。

这是添加拦截器的方法 -

HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpBuilder.addInterceptor(loggingInterceptor);
client = okHttpBuilder.build();

当涉及到您想要记录的内容时,有四个选项 - NONEBASICHEADERSBODY

现在使用上面定义的客户端构建改造实例,您将拥有所需的所有数据。

于 2016-03-07T17:21:00.057 回答