Comment définir le délai de connexion avec OkHttp

Je développe l’application en utilisant la bibliothèque OkHttp et mon problème est que je ne peux pas trouver comment définir le délai de connexion et le délai d’expiration de socket.

OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); Response response = client.newCall(request).execute(); 

Merci.

Vous devez simplement le faire

 OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(15, TimeUnit.SECONDS); // connect timeout client.setReadTimeout(15, TimeUnit.SECONDS); // socket timeout Request request = new Request.Builder().url(url).build(); Response response = client.newCall(request).execute(); 

Sachez que la valeur définie dans setReadTimeout est celle utilisée dans setSoTimeout sur le Socket interne dans la classe de Connection OkHttp .

Ne pas définir de délai d’attente sur OkHttpClient équivaut à définir une valeur de 0 sur setConnectTimeout ou setReadTimeout et n’entraînera aucun délai d’attente. La description peut être trouvée ici .

Comme mentionné par @marceloquinta dans les commentaires, setWriteTimeout peut également être défini.

À partir de la version 2.5.0, les valeurs de délai de lecture / écriture / connexion sont définies sur 10 secondes par défaut, comme indiqué par @ChristerNordvik. Cela peut être vu ici .

OkHttp3 peut maintenant le faire à travers le constructeur ainsi

 client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build(); 

Vous pouvez également voir la recette ici

Pour okhttp3, cela a un peu changé.

Maintenant, vous configurez les temps en utilisant le générateur, et non les configurateurs, comme ceci:

 OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build(); 

Plus d’informations peuvent être trouvées sur leur wiki: https://github.com/square/okhttp/wiki/Recipes#timeouts

Pour la modernisation: 2.0.0-beta4, le code est le suivant

 OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(logging) .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.yourapp.com/") .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); 

Pour Retrofit 2.0.0-beta1 ou beta2, le code est le suivant

  OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(30, TimeUnit.SECONDS); client.setReadTimeout(30, TimeUnit.SECONDS); client.setWriteTimeout(30, TimeUnit.SECONDS); Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.yourapp.com/") .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); 
 //add in gradle and sync comstack 'com.squareup.okhttp3:okhttp:3.2.0' comstack 'com.google.code.gson:gson:2.6.2' import okhttp3.OkHttpClient; import okhttp3.OkHttpClient.Builder; Builder b = new Builder(); b.readTimeout(200, TimeUnit.MILLISECONDS); b.writeTimeout(600, TimeUnit.MILLISECONDS); // set other properties OkHttpClient client = b.build(); 

ainsi:

 //New Request HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BASIC); final OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(logging) .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build(); 

Il a changé maintenant. Remplacez .Builder() par .newBuilder()

À partir de okhttp: 3.9.0, le code est le suivant:

 OkHttpClient okHttpClient = new OkHttpClient() .newBuilder() .connectTimeout(10,TimeUnit.SECONDS) .writeTimeout(10,TimeUnit.SECONDS) .readTimeout(30,TimeUnit.SECONDS) .build(); 

cela a fonctionné pour moi… de https://github.com/square/okhttp/issues/3553

 OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .retryOnConnectionFailure(false) <-- not necessary but useful! .build(); 

Si vous souhaitez personnaliser la configuration, utilisez d’abord la méthode ci-dessous de création de OKhttpclient, puis ajoutez le générateur par-dessus.

 private final OkHttpClient client = new OkHttpClient(); // Copy to customize OkHttp for this request. OkHttpClient client1 = client.newBuilder() .readTimeout(500, TimeUnit.MILLISECONDS) .build(); try (Response response = client1.newCall(request).execute()) { System.out.println("Response 1 succeeded: " + response); } catch (IOException e) { System.out.println("Response 1 failed: " + e); }