如何为 OkHttp 中的每个请求设置代理?

How to set proxy for each request in OkHttp?

我正在使用 OkHttp 构建类似代理的应用程序。此应用程序需要将不同的请求转发到不同的代理。

我在 OkHttp 中没有找到任何 api 来为一个请求设置代理, ProxySelector 也不能解决我的问题,因为为请求选择代理不仅取决于请求的主机。

您可以保留一个 OkHttpClient 池,一个用于您需要连接的每个代理。当您需要通过代理发出请求时,您可以获取设置为使用该代理的 OkHttpClient 并使用它来发出您的请求(必要时创建客户端)。

根据您需要连接的代理数量,您可能还想清除不常用的客户端以节省内存。

如果您使用okhttpClient.newBuilder()从一个客户端创建另一个客户端,那么每个客户端都会非常轻量级。例如,它们将共享相同的连接池和调度程序。参见 OkHttpClient’s docs on sharing