Как маршрутизировать запросы через определенный сетевой интерфейс с помощью Okhttp3? - PullRequest
0 голосов
/ 14 июня 2019

Мы используем OkHttp3 Client для отправки запросов на сервер Jetty Http / 2.Мы хотели бы направить запросы через определенный сетевой интерфейс от клиента.

Мы попытались переопределить метод createSocket с двумя аргументами (хост InetAddress, int port), как показано ниже

client = new OkHttpClient.Builder()
 .socketFactory(new SocketFactory() {
  final SocketFactory defaultSocketFactory = SocketFactory.getDefault();

  @Override
  public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
   LOG.info("4 argument create socket invoked {} {} {} {}", address, port, localAddress, localPort);
   return defaultSocketFactory.createSocket(address, port, localAddress, localPort);
  }

  @Override
  public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
   LOG.info("Another 4 argument create socket invoked {} {} {} {}", host, port, localHost, localPort);
   return defaultSocketFactory.createSocket(host, port, localHost, localPort);
  }

  @Override
  public Socket createSocket(InetAddress host, int port) throws IOException {
   LOG.info("Expected Create socket invoked {} {} ", host, port);
   return defaultSocketFactory.createSocket(InetAddress.getByName(dnsIPAddress), port);
  }

  @Override
  public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
   LOG.info("Other 2 Argument Create socket invoked {} {} ", host, port);
   return defaultSocketFactory.createSocket(host, port);
  }
 })
 .connectTimeout(6000, TimeUnit.MILLISECONDS)
 .retryOnConnectionFailure(true)
 .readTimeout(5000, TimeUnit.MILLISECONDS)
 .writeTimeout(5000, TimeUnit.MILLISECONDS)     
 .build();

Для краткости построения контекст SSL опущен.

Вышеуказанный способпереопределения правильно?Мы не даем ожидаемых результатов?

Нам нужно, запросы должны маршрутизироваться через указанный IP-адрес и порт со стороны клиента.

...