java timeout okhttp

java - Cómo establecer el tiempo de espera de conexión con OkHttp



okhttp3 timeout (8)

Ha cambiado ahora. Reemplace .Builder() con .newBuilder()

A partir de okhttp: 3.9.0 el código es el siguiente:

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

Estoy desarrollando una aplicación usando la biblioteca OkHttp y mi problema es que no puedo encontrar cómo configurar el tiempo de espera de la conexión y el tiempo de espera del socket.

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

Gracias.


Para Retrofit 2.0.0-beta1 o beta2, el código es el siguiente

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();


Para la modificación de Retrofit: 2.0.0-beta4 el código es el siguiente

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();


Para okhttp3 esto ha cambiado un poco.

Ahora configura los tiempos usando el constructor, y no los setters, así:

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

Se puede encontrar más información en su wiki: https://github.com/square/okhttp/wiki/Recipes#timeouts


Simplemente tienes que hacer esto

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();

Tenga en cuenta que el valor establecido en setReadTimeout es el utilizado en setSoTimeout en el Socket internamente en la clase OkHttp Connection .

No establecer ningún tiempo de espera en OkHttpClient equivale a establecer un valor de 0 en setConnectTimeout o setReadTimeout y no generará ningún tiempo de espera. Descripción se puede encontrar here .

Como mencionó @marceloquinta en los comentarios setWriteTimeout también se puede configurar.

A partir de la versión 2.5.0, los valores de tiempo de espera de lectura / escritura / conexión se establecen en 10 segundos de forma predeterminada, tal como lo menciona @ChristerNordvik. Esto se puede ver here .

A partir de OkHttp3 ahora puede hacer esto a través del Builder como tal

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

También puedes ver la receta here


al igual que:

//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();


esto funcionó para mí ... 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();


//add in gradle and sync compile ''com.squareup.okhttp3:okhttp:3.2.0'' compile ''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();