在 OkHttp 上配置正向代理,然后把同一个客户端传给 Retrofit:

import java.net.InetSocketAddress;
import java.net.Proxy;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;

Proxy proxy = new Proxy(
    Proxy.Type.HTTP,
    new InetSocketAddress("proxy.example", 8080));

OkHttpClient http = new OkHttpClient.Builder()
    .proxy(proxy)
    .build();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.example/")
    .client(http)
    .build();

这段代码构建传输层和 Retrofit 实例。在 build 之前,把应用所需的转换器与调用适配器工厂加入这个 builder,然后基于该实例创建服务接口。

让 baseUrl 指向真正的 API 服务。把代理 URL 放在那里只会改变 HTTP 目的地,并不会配置代理协商。基础 URL 还保留了 Retrofit 对结尾斜杠的要求。在不使用代理认证的情况下,获准进行的公共 API 测试可以从 HTTP 代理列表 中取一个 HTTP 地址用于单独的 Proxy 对象。

OkHttp 的显式代理优先于它的 ProxySelector。当客户端需要一个固定的中间层时使用这种写法。需要按目的地分流的应用,应当改用受支持的 selector 来设计该策略。

如果服务接口已经从另一个 Retrofit 实例创建,构建这个新实例不会搬移旧接口的请求。要把配置好的客户端、Retrofit 实例和服务对象放在同一条构建路径上。

对于需要认证的代理,OkHttp 把 proxyAuthenticator 与目的地认证器分开暴露。需要时在 OkHttp builder 上配置它,然后把完成的客户端交给 Retrofit。对于使用 Basic 认证的代理,请采用 有界的 proxyAuthenticator 重试处理。

相关文章