2017-12-23 6 views
0

Ich muss spezifische Anfragen werfen werfen Wifi, auch WLAN "Verbunden, kein Internet" und "Mobile Data" ist eingeschaltet.OkHttp Route Verkehr werfen Wifi und SocketFactory

Unten Beispiel arbeitet mit HttpURLConnection in Ordnung, aber funktioniert nicht mit OkHttp3 (3.8.1), die primäre Netzwerkbibliothek für App ist:

-Code funktioniert wie unten mit OkHttp Version erwartet: 3.4.2

Aber gebrochen seit OkHttp Version: 3.5.0

OkHttpClient.Builder builder = new OkHttpClient.Builder(); 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     final Network[] networks = connectivityManager.getAllNetworks(); 

     for (final Network network : networks) { 
      final NetworkInfo netInfo = connectivityManager.getNetworkInfo(network); 
      if (netInfo.getType() == ConnectivityManager.TYPE_WIFI && netInfo.getState() == NetworkInfo.State.CONNECTED) { 

      // just for example HttpURLConnection works as expected and route traffic throw wifi 
      connection = (HttpURLConnection) network.openConnection(url); 

      // not works since >=3.5.0, route traffic in same way 
      builder.socketFactory(network.getSocketFactory()); 

      } 
     } 
    } 

OkHttpClient client = builder.build(); 
final Response response = client.newCall(initialRequest).execute(); 

client.newCall nicht wie erwartet funktioniert, wie ich es verstehe, oder ich einfach fehlende s etwas.

Antwort

0

Schließlich fand ich.

https://github.com/square/okhttp/commit/2a5fb08b39195d4238c7117e851e9221f94de62a#diff-ec23bee7240c28053b0ca4fbc6029529

Also, wenn Sie wollen das alte Verhalten (wie in 3.4.2 Version) zurück können Sie java.net.ProxySelector.getDefault() und wickeln Sie es mit einem nehmen, die auch NO_PROXY versucht.

In meinem Fall, wie oben beschrieben, muss ich deaktivieren Proxy manuell vor socket hinzufügen:

builder.proxy(Proxy.NO_PROXY); 
builder.socketFactory(network.getSocketFactory()); 
Verwandte Themen