2017-12-23 20 views
0

特定のリクエストを送信する必要があります。Wi-Fiでも「Connected、no internet」と「Mobile Data」がオンになっています。例以下はOkHttpルートのトラフィックがWi-FiとSocketFactoryをスローする

HttpURLConnectionで正常に動作ではなく、アプリの主要なネットワークライブラリであるOkHttp3(3.8.1)で動作します:3.4.2

:以下

コードOkHttpバージョンで期待通りに動作します

しかしOkHttpバージョン以降壊れた: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ない作品、私は理解し、または私の単純な不足しているsと予想通り何か。

答えて

0

最後に、私が見つかりました。

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

だから、あなたが戻ってあなたが取るjava.net.ProxySelector.getDefault()ともNO_PROXYをしようとするものと、それをラップすることができます(3.4.2バージョンでのように)以前の動作を取得したい場合。上記の私の場合は

は、私は手動で無効にプロキシが前のSocketFactoryを追加する必要があります。

builder.proxy(Proxy.NO_PROXY); 
builder.socketFactory(network.getSocketFactory()); 
関連する問題