Retrofit api client with BasicAuthInterceptor [kotlin]
1 min readSep 6, 2020
import com.google.gson.GsonBuilder
import okhttp3.*
import okhttp3.logging.HttpLoggingInterceptor
import okio.IOException
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
object ApiClient {
private val okHttpClient by lazy { OkHttpClient() }
private val retrofit: Retrofit by lazy {
val builder = Retrofit.Builder()
.baseUrl("BASE_URL")
.addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))
val dispatcher = Dispatcher()
dispatcher.maxRequests = 1
val loggingInterceptor = HttpLoggingInterceptor()
loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
val client: OkHttpClient = okHttpClient.newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.addInterceptor(BasicAuthInterceptor("basic_auth_user_name", "password"))
.dispatcher(dispatcher)
.build()
builder.client(client).build()
}
fun <T> createService(tClass: Class<T>?): T {
return retrofit.create(tClass)
}
}
class BasicAuthInterceptor(user: String, password: String) :
Interceptor {
private val credentials: String = Credentials.basic(user, password)
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val request: Request = chain.request()
val authenticatedRequest: Request = request.newBuilder()
.header("Authorization", credentials).build()
return chain.proceed(authenticatedRequest)
}
}
Blog: https://piashcse.blogspot.com/2020/07/retrofit-api-client-with.html