web-dev-qa-db-fra.com

La communication CLEARTEXT n'est pas prise en charge sur Retrofit

J'essaie de me connecter au serveur https sur Android utilisant Retrofit. Voici mon OkHttpClient

@Provides
public OkHttpClient provideContactClient(){
  HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
  ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
      .tlsVersions(TlsVersion.TLS_1_2)
      .cipherSuites(CipherSuite.TLS_RSA_WITH_DES_CBC_SHA,
          CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256,
          CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
      .build();
  interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
  SSLSocketFactory sslSocketFactory = null;
  try {
    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(null, null, null);
    sslSocketFactory = sslContext.getSocketFactory();
  }catch (GeneralSecurityException e){
    e.printStackTrace();
  }
  return new OkHttpClient.Builder()
      .addInterceptor(interceptor)
      .connectionSpecs(Collections.singletonList(spec))
      .sslSocketFactory(sslSocketFactory)
      .authenticator(new Authenticator() {
        @Override
        public Request authenticate(Route route, Response response) throws IOException {
          if(responseCount(response) >= 5){
            return null;
          }
          String credential = Credentials.basic("user", "pass");
          return response.request().newBuilder().header("Authorization", credential).build();
        }
      })
      .build();
}

Cependant, je reçois toujours l'exception CLEARTEXT communication not supported:

Lors du débogage de la classe RealConnection, je remarque que le membre route.address() n'a pas le sslSocketFactory malgré son affectation dans Bulider.

28
hubert

tiliseCleartextTraffic

utilisez les outils: replace = "Android: usesCleartextTraffic" dans votre fichier manifest.xml

0
Nagraj Naveen

"La communication CLEARTEXT non prise en charge exception" peut également être facilement produite même dans les anciens appareils Android (6.0, 5.0, 5.1, etc.) par la bibliothèque OkHttp si vous demandez un http: // Host avec un Paramètres https/tls ConnectionSpec.

0