我在服务器上运行的应用程序中使用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映射到所需的远程接口。