画像のダウンロード時にリクエストするカスタム ヘッダーを追加する方法はありますか? Glide でボレーまたは okhttp を使用できます。
okhttpclient の cookiemanager に cookie を追加しようとしましたが、役に立ちませんでした。
Glide でリクエスト応答をデバッグする方法はありますか?
画像のダウンロード時にリクエストするカスタム ヘッダーを追加する方法はありますか? Glide でボレーまたは okhttp を使用できます。
okhttpclient の cookiemanager に cookie を追加しようとしましたが、役に立ちませんでした。
Glide でリクエスト応答をデバッグする方法はありますか?
これを試して:
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);
グライドのリファレンスは次のとおりです。
implementation 'com.github.bumptech.glide:glide:4.6.1'
Glide で実行できない場合は、OkHttp Interceptorsを使用できます。
// 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 */ }
}
}
}
その後
....load("http://....")....;
インターセプターは素晴らしい選択のように思えます。OkHttp クライアントの独自のインスタンスを OkHttpUrlLoader.Factory に渡し、Factory を Glideに登録できます。
さらに制御が必要な場合は、単にOkHttp ModelLoaderとDataFetcherをフォークし、フォークした ModelLoaderを登録して、リクエストごとに OkHttp クライアントに直接アクセスすることもできます。
このスレッドをお読みください: https://github.com/bumptech/glide/issues/198
次のリリース (4.0) で実装されるようです。