You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Glide加载重定向链接图片失败提示重定向循环如何解决

前置排查

先确认链接本身不存在循环重定向:可以把链接放到浏览器中打开,看是否能正常加载图片。如果浏览器也无法加载,说明是链接本身的问题,无需调整Glide配置。
如果浏览器可以正常加载,说明是Glide的请求配置不符合目标站点的要求,大概率是防盗链限制或者重定向次数不足,按下方方案处理即可。

问题根因

Glide默认内置的HttpUrlFetcher最多仅支持5次重定向,当目标链接的重定向次数超过该阈值、或者存在循环重定向逻辑时,就会抛出In re-direct loop异常。

解决方案

方案1:替换Glide网络栈为OkHttp(推荐)

OkHttp对重定向的处理更成熟,默认支持20次重定向,适配绝大多数场景,集成步骤如下:

  • 引入Glide的OkHttp3集成依赖(版本和你项目中的Glide版本保持一致)
dependencies {
    implementation "com.github.bumptech.glide:glide:你的Glide版本号"
    implementation "com.github.bumptech.glide:okhttp3-integration:你的Glide版本号"
    kapt "com.github.bumptech.glide:compiler:你的Glide版本号"
}
  • 自定义OkHttpClient配置重定向规则,注册到Glide
@GlideModule
class CustomGlideModule : AppGlideModule() {
    override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        val okHttpClient = OkHttpClient.Builder()
            .followRedirects(true)
            .followSslRedirects(true)
            // 可自行调整最大重定向次数
            .callTimeout(15, TimeUnit.SECONDS)
            .build()
        registry.replace(
            GlideUrl::class.java,
            InputStream::class.java,
            OkHttpUrlLoader.Factory(okHttpClient)
        )
    }
}

配置完成后原有加载代码无需修改即可正常使用。

方案2:调整默认HttpUrlFetcher的重定向次数阈值

如果不想引入OkHttp,可以自定义HttpUrlFetcher修改默认的重定向次数上限:

  • 自定义重写HttpUrlFetcher,修改最大重定向次数:
public class CustomHttpUrlFetcher extends HttpUrlFetcher {
    // 将默认的5次调整为10次,可按需修改
    private static final int MAX_REDIRECTS = 10;

    public CustomHttpUrlFetcher(GlideUrl glideUrl, int timeout) {
        super(glideUrl, timeout);
    }

    @Override
    protected InputStream loadDataWithRedirects(URL url, int redirects, URL lastUrl, Map<String, String> headers) throws IOException {
        if (redirects >= MAX_REDIRECTS) {
            throw new HttpException("Too many (> " + MAX_REDIRECTS + ") redirects!");
        }
        return super.loadDataWithRedirects(url, redirects, lastUrl, headers);
    }
}
  • 自定义Glide模块注册自定义的Fetcher即可。

方案3:添加防盗链请求头

如果调整重定向次数后仍然报错,说明目标站点有防盗链限制,返回的重定向地址循环跳转,你可以给GlideUrl加上对应的请求头再加载:

GlideUrl glideUrl = new GlideUrl(url, new LazyHeaders.Builder()
    .addHeader("User-Agent", "和浏览器一致的User-Agent")
    .addHeader("Referer", "目标站点的域名,比如https://www.washingtonpost.com/")
    .build());
Glide.with(this.context).load(glideUrl).centerCrop().into(imageView);

方案4:提前解析重定向最终URL

如果是服务端可控的场景,可以提前请求拿到重定向后的最终图片地址,再传给Glide加载,避免每次加载都走重定向流程,性能最优。

内容的提问来源于stack exchange,提问作者FranKs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:36:03