如何指定OkHttp在建立新连接时将使用的网络接口



我在服务器上运行的应用程序中使用OkHttp,并且服务器在操作系统级别配置了多个网络接口。

我如何控制OkHttp将使用哪个网络接口发送新请求?

默认情况下,我看到它只是选择一个可用的接口,因为我想为构建在OkHttp之上的应用程序的用户提供配置应该使用的接口的能力。

我相信你可以使用

https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.Builder.html#socketFactory-javax.net.SocketFactory-

public OkHttpClient.Builder socketFactory(SocketFactory socketFactory)

设置用于创建连接的套接字工厂。OkHttp仅使用无参数的createSocket()方法来创建未连接的套接字。例如,重写此方法可以将套接字绑定到特定的本地地址。如果未设置,则系统范围内的默认套接字工厂将被使用。

例如https://github.com/yschimke/okurl/blob/e307022667e2beb474309af5b350cd241f2a9045/src/main/kotlin/com/baulsupp/okurl/network/InterfaceSocketFactory.kt

class InterfaceSocketFactory(private val localAddress: InetAddress) : SocketFactory() {
  private val systemFactory = getDefault()
  override fun createSocket(): Socket {
    val s = systemFactory.createSocket()
    s.bind(InetSocketAddress(localAddress, 0))
    return s
  }

如果只是为了测试,您可以使用名为Charles的工具设置Http代理。将url映射到所需的远程接口。

最新更新