Glide - adding header to request

你说的曾经没有我的故事 提交于 2019-12-03 06:57:32

问题


is there a method to add custom header to request when image is downloaded? I can use volley or okhttp in Glide.

I try add cookie to cookiemanager in okhttpclient, but it doesn't helped. Is there a method to debug request response in Glide?

Best regards Tom


回答1:


Since 3.6.0 it's possible to set custom headers for each request:

GlideUrl glideUrl = new GlideUrl("url", new LazyHeaders.Builder()
    .addHeader("key1", "value")
    .addHeader("key2", new LazyHeaderFactory() {
        @Override
        public String buildHeader() {
            String expensiveAuthHeader = computeExpensiveAuthHeader();
            return expensiveAuthHeader;
        }
    })
    .build());

Glide....load(glideUrl)....;



回答2:


If you can't get Glide to do it, you can use OkHttp Interceptors.




回答3:


Try this:

ImageView imgThumb = itemView.findViewById(R.id.image_thumb);

GlideUrl url = new GlideUrl("https://your-url.com", new LazyHeaders.Builder()
                .addHeader("User-Agent", "your-user-agent")
                .build());

RequestOptions options = new RequestOptions()
    .diskCacheStrategy(DiskCacheStrategy.NONE);

Glide.with(mContext).load(glideUrl)
                    .transition(withCrossFade())
                    .thumbnail(0.5f)
                    .apply(options)
                    .into(imgThumb);

The Glide reference is:

implementation 'com.github.bumptech.glide:glide:4.6.1'



回答4:


Interceptors sound like a great choice. You can pass in your own instance of an OkHttp client to an OkHttpUrlLoader.Factory and register the Factory with Glide.

If you want more control, you can also simply fork the OkHttp ModelLoader and DataFetcher, register your forked ModelLoader, and get direct access to the OkHttp client for every request.




回答5:


// make sure it's registered in AndroidManifest.xml as described at https://github.com/bumptech/glide/wiki/Configuration#including-a-glidemodule
public class GlideSetup implements GlideModule {
@Override public void applyOptions(Context context, GlideBuilder builder) { /* no costumization */ }
@Override public void registerComponents(Context context, Glide glide) {
    glide.register(String.class, InputStream.class, new HeaderedLoader.Factory());
}

private static class HeaderedLoader extends BaseGlideUrlLoader<String> {
    public static final Headers HEADERS = new LazyHeaders.Builder()
            .addHeader("User-Agent", USER_AGENT)
            .addHeader("App-Agent", APP_AGENT)
            .build();

    public HeaderedLoader(Context context) {
        super(context);
    }

    @Override protected String getUrl(String model, int width, int height) {
        return model;
    }

    @Override protected Headers getHeaders(String model, int width, int height) {
        return HEADERS;
    }

    public static class Factory implements ModelLoaderFactory<String, InputStream> {
        @Override public StreamModelLoader<String> build(Context context, GenericLoaderFactory factories) {
            return new HeaderedLoader(context);
        }
        @Override public void teardown() { /* nothing to free */ }
    }
}

}

and then

....load("http://....")....;



回答6:


Please read this thread: https://github.com/bumptech/glide/issues/198

It appears as if it will be implemented in the coming release (4.0).




回答7:


Kotlin + Glide 4.10.0

val token = "..."
val url = https://url.to.your.image
val glideUrl = GlideUrl(url) { mapOf(Pair("Authorization", "Bearer $token")) }

Glide.with(context)
     .load(glideUrl)
     .into(imageView)


来源:https://stackoverflow.com/questions/28106527/glide-adding-header-to-request

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!