OkHttpClient

Factory for calls, which can be used to send HTTP requests and read their responses.

OkHttpClients Should Be Shared

OkHttp performs best when you create a single OkHttpClient instance and reuse it for all of your HTTP calls. This is because each client holds its own connection pool and thread pools. Reusing connections and threads reduces latency and saves memory. Conversely, creating a client for each request wastes resources on idle pools.

Use new OkHttpClient() to create a shared instance with the default settings:

// The singleton HTTP client.
public final OkHttpClient client = new OkHttpClient();

Or use new OkHttpClient.Builder() to create a shared instance with custom settings:

// The singleton HTTP client.
public final OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor())
.cache(new Cache(cacheDir, cacheSize))
.build();

Customize Your Client With newBuilder()

You can customize a shared OkHttpClient instance with newBuilder. This builds a client that shares the same connection pool, thread pools, and configuration. Use the builder methods to add configuration to the derived client for a specific purpose.

This example shows the single instance with default configurations.

public final OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(1000, TimeUnit.MILLISECONDS)
.writeTimeout(1000, TimeUnit.MILLISECONDS)
.build();

This example shows a call with a short 500 millisecond read timeout and a 1000 millisecond write timeout. Original configuration is kept, but can be overriden.

OkHttpClient eagerClient = client.newBuilder()
.readTimeout(500, TimeUnit.MILLISECONDS)
.build();
Response response = eagerClient.newCall(request).execute();

Shutdown Isn't Necessary

The threads and connections that are held will be released automatically if they remain idle. But if you are writing a application that needs to aggressively release unused resources you may do so.

Shutdown the dispatcher's executor service with shutdown(). This will also cause future calls to the client to be rejected.

client.dispatcher().executorService().shutdown();

Clear the connection pool with evictAll(). Note that the connection pool's daemon thread may not exit immediately.

client.connectionPool().evictAll();

If your client has a cache, call close(). Note that it is an error to create calls against a cache that is closed, and doing so will cause the call to crash.

client.cache().close();

OkHttp also uses daemon threads for HTTP/2 connections. These will exit automatically if they remain idle.

Constructors

Link copied to clipboard
constructor()

Types

Link copied to clipboard
class Builder
Link copied to clipboard
object Companion

Properties

Link copied to clipboard
@get:JvmName(name = "authenticator")
val authenticator: Authenticator
Link copied to clipboard
@get:JvmName(name = "cache")
val cache: Cache?
Link copied to clipboard
@get:JvmName(name = "callTimeoutMillis")
val callTimeoutMillis: Int

Default call timeout (in milliseconds). By default there is no timeout for complete calls, but there is for the connect, write, and read actions within a call.

Link copied to clipboard
@get:JvmName(name = "certificateChainCleaner")
val certificateChainCleaner: CertificateChainCleaner?
Link copied to clipboard
@get:JvmName(name = "certificatePinner")
val certificatePinner: CertificatePinner
Link copied to clipboard
@get:JvmName(name = "connectionPool")
val connectionPool: ConnectionPool
Link copied to clipboard
@get:JvmName(name = "connectionSpecs")
val connectionSpecs: List<ConnectionSpec>
Link copied to clipboard
@get:JvmName(name = "connectTimeoutMillis")
val connectTimeoutMillis: Int

Default connect timeout (in milliseconds). The default is 10 seconds.

Link copied to clipboard
@get:JvmName(name = "cookieJar")
val cookieJar: CookieJar
Link copied to clipboard
@get:JvmName(name = "dispatcher")
val dispatcher: Dispatcher
Link copied to clipboard
@get:JvmName(name = "dns")
val dns: Dns
Link copied to clipboard
@get:JvmName(name = "eventListenerFactory")
val eventListenerFactory: EventListener.Factory
Link copied to clipboard
@get:JvmName(name = "fastFallback")
val fastFallback: Boolean
Link copied to clipboard
@get:JvmName(name = "followRedirects")
val followRedirects: Boolean
Link copied to clipboard
@get:JvmName(name = "followSslRedirects")
val followSslRedirects: Boolean
Link copied to clipboard
@get:JvmName(name = "hostnameVerifier")
val hostnameVerifier: HostnameVerifier
Link copied to clipboard
@get:JvmName(name = "interceptors")
val interceptors: List<Interceptor>

Returns an immutable list of interceptors that observe the full span of each call: from before the connection is established (if any) until after the response source is selected (either the origin server, cache, or both).

Link copied to clipboard
@get:JvmName(name = "minWebSocketMessageToCompress")
val minWebSocketMessageToCompress: Long

Minimum outbound web socket message size (in bytes) that will be compressed. The default is 1024 bytes.

Link copied to clipboard
@get:JvmName(name = "networkInterceptors")
val networkInterceptors: List<Interceptor>

Returns an immutable list of interceptors that observe a single network request and response. These interceptors must call Interceptor.Chain.proceed exactly once: it is an error for a network interceptor to short-circuit or repeat a network request.

Link copied to clipboard
@get:JvmName(name = "pingIntervalMillis")
val pingIntervalMillis: Int

Web socket and HTTP/2 ping interval (in milliseconds). By default pings are not sent.

Link copied to clipboard
@get:JvmName(name = "protocols")
val protocols: List<Protocol>
Link copied to clipboard
@get:JvmName(name = "proxy")
val proxy: Proxy?
Link copied to clipboard
@get:JvmName(name = "proxyAuthenticator")
val proxyAuthenticator: Authenticator
Link copied to clipboard
@get:JvmName(name = "proxySelector")
val proxySelector: ProxySelector
Link copied to clipboard
@get:JvmName(name = "readTimeoutMillis")
val readTimeoutMillis: Int

Default read timeout (in milliseconds). The default is 10 seconds.

Link copied to clipboard
@get:JvmName(name = "retryOnConnectionFailure")
val retryOnConnectionFailure: Boolean
Link copied to clipboard
@get:JvmName(name = "socketFactory")
val socketFactory: SocketFactory
Link copied to clipboard
@get:JvmName(name = "sslSocketFactory")
val sslSocketFactory: SSLSocketFactory
Link copied to clipboard
@get:JvmName(name = "webSocketCloseTimeout")
val webSocketCloseTimeout: Int

Web socket close timeout (in milliseconds).

Link copied to clipboard
@get:JvmName(name = "writeTimeoutMillis")
val writeTimeoutMillis: Int

Default write timeout (in milliseconds). The default is 10 seconds.

Link copied to clipboard
@get:JvmName(name = "x509TrustManager")
val x509TrustManager: X509TrustManager?

Functions

Link copied to clipboard

Creates an Address of out of the provided HttpUrl that uses this client’s DNS, TLS, and proxy configuration.

Link copied to clipboard
Link copied to clipboard
open override fun newCall(request: Request): Call

Prepares the request to be executed at some point in the future.

Link copied to clipboard
open override fun newWebSocket(request: Request, listener: WebSocketListener): WebSocket

Uses request to connect a new web socket.