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

如何让Glide等待DDoS保护流程结束后再加载网络图片

Glide加载带DDoS保护站点图片的解决方法

这类站点的DDoS保护(常见为Cloudflare等服务商提供)的核心逻辑是:首次访问时返回验证页面要求客户端执行JS校验,校验通过后下发有效期较长的Cookie,后续请求携带该Cookie即可正常获取资源。你可以通过以下方案实现正常加载:


方案1:端侧预验证后加载

  • 先在应用内启动一个无UI的WebView,提前访问目标资源的根域名,等待WebView自动完成DDoS校验流程,此时验证通过的Cookie会自动存入系统Cookie管理器。
  • 自定义Glide的网络请求组件,配置请求时自动携带系统Cookie管理器中对应域名的Cookie即可正常加载。
  • 示例配置(基于OkHttp实现Glide网络层):
// 自定义CookieJar,同步系统WebView的Cookie
class WebViewSyncCookieJar : CookieJar {
    private val cookieManager = CookieManager.getInstance()
    override fun loadForRequest(url: HttpUrl): List<Cookie> {
        val cookieStr = cookieManager.getCookie(url.toString()) ?: return emptyList()
        return cookieStr.split(";").mapNotNull { Cookie.parse(url, it.trim()) }
    }
    override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) {
        cookies.forEach { cookieManager.setCookie(url.toString(), it.toString()) }
    }
}

// 配置Glide使用带自定义CookieJar的OkHttp客户端
@GlideModule
class CustomGlideModule : AppGlideModule() {
    override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        val okHttpClient = OkHttpClient.Builder()
            .cookieJar(WebViewSyncCookieJar())
            .build()
        registry.replace(GlideUrl::class.java, InputStream::class.java, OkHttpUrlLoader.Factory(okHttpClient))
    }
}
  • 预验证完成后,直接用你原有的Glide加载代码即可正常请求图片。

方案2:后端代理中转(更稳定的生产方案)

  • 不需要在端侧处理复杂的验证逻辑,在你的业务后端新增代理接口,由后端服务先完成目标站点的DDoS校验、获取图片资源,再将资源返回给端侧。
  • 端侧直接将Glide的加载地址替换为你的代理接口地址即可,兼容性和稳定性更高,不会触发站点的客户端识别封禁规则。

注意:如果使用端侧直接验证的方案,需要确认目标站点的服务条款是否允许非浏览器客户端访问,避免违反使用规则导致IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:09