如何在Glide库中设置代理

时间:2018-10-10 21:47:02

标签: android proxy android-glide

我正在使用捆绑在我的应用程序中的Psiphon vpn,因此所有REST调用都通过本地端口。

我已在OkHttp的{​​{1}}客户中添加了代理,如下所示:

Retrofit

到目前为止,一切正常,我可以通过本地代理成功加载所有文本内容,但是由于Glide具有自定义连接,因此无法加载图像。

现在我想将类似于上述代码的代理设置为Glide或其他任何用于图像加载的库

我正在像这样使用Glide“ 4.8.0”:

OkHttpClient.Builder client = 
            new OkHttpClient.Builder().proxy(new Proxy(Proxy.Type.HTTP,
            new InetSocketAddress("localhost", randomPort )));
builder.client(client.build());
retrofit = builder.build();

1 个答案:

答案 0 :(得分:0)

我使用自定义@GlideModule

将以下几行添加到应用build.gradle

implementation 'com.github.bumptech.glide:glide:4.8.0'
implementation('com.github.bumptech.glide:okhttp3-integration:4.8.0') {
   exclude group: 'glide-parent'
}
implementation 'com.github.bumptech.glide:annotations:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

这是我的自定义模块:

@GlideModule
public class CustomGlideModule extends AppGlideModule {

  @Override
  public void registerComponents(Context context, Glide glide, Registry registry) {
    Builder builder = new Builder()
        .readTimeout(60, TimeUnit.SECONDS)
        .connectTimeout(60, TimeUnit.SECONDS);
    if (VpnService.connected) {
      builder.proxy(VpnService.proxy);
    }
    OkHttpClient client = builder.build();

    OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client);

    glide.getRegistry().replace(GlideUrl.class, InputStream.class, factory);
  }
}

Glide将使用类顶部的@GlideModule自动检测到它,并将在运行时注入它。现在,每次Glide图像加载都将通过我的自定义模块和自定义OkHttp连接