如何使用Glide和OkHttp获取http响应头

问题描述 投票:1回答:2

我需要从图像中获取http响应头。如何为Glide的每个请求创建一个拦截器?是否有必要创建一个Glide模块?

java android okhttp android-glide
2个回答
3
投票

首先,你必须使用自定义GlideModule而不是默认值来集成Glide和OkHttp。

请参阅this example如何做到这一点。

然后你必须编写一个OkHttp拦截器来拦截响应信息并获得响应头。

请参阅此OkHttp Logging Interceptor代码,您将了解如何拦截响应并获取响应标头。

你必须将你的拦截器设置为你的OkHttpClient(它主要是一个单例实例):

OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(yourInterceptor).build();

那个OkHttpClient实例必须传递给你的自定义GlideModule实现的registerComponents()回调:

glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory( okHttpClient ));

0
投票

您可以通过拦截滑行响应获得响应标头

@GlideModule
class MyGlideModule : AppGlideModule() {
      override fun applyOptions(context: Context?, builder: GlideBuilder?) {
      }

      override fun registerComponents(context: Context?, glide: Glide?, 
        registry: Registry?) {
            super.registerComponents(context, glide, registry)
            val httpClient = OkHttpClient.Builder()
            httpClient.addInterceptor({ chain: Interceptor.Chain? ->
                val response = chain?.proceed(chain.request())
                // for get specific header  
                val header = response?.header("specific header")
                // for get all headers 
                val headers = response?.headers()

                response
            })

            registry?.replace(GlideUrl::class.java, InputStream::class.java, 
            OkHttpUrlLoader.Factory(httpClient.build()))
        }
    }

如果你找不到像OkHttpUrlLoader这样的类,那么找到它Here

© www.soinside.com 2019 - 2024. All rights reserved.