Search code examples
androidkotlinkotlin-multiplatformktorkotlin-multiplatform-mobile

How to use existing okhttp3 Interceptor in ktor


Hey I am working in Kotlin Mutliplatorm moblie in android and ios project. When I was using Retrofit, I could easily create interceptors to see the calls:

 val httpLoggingInterceptor = HttpLoggingInterceptor()
        httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BASIC
            val httpClient = OkHttpClient.Builder()
                    .addInterceptor(httpLoggingInterceptor)
                    .addInterceptor(HeadersInterceptor())

Header Interceptor

import okhttp3.Interceptor
import okhttp3.Response

class HeadersInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val requestBuilder = chain.request().newBuilder()

        requestBuilder.addHeader("Client-Version", getClientVersion())

        val request = requestBuilder.build()

        return chain.proceed(request)
    }

    private fun getClientVersion(): String {
        var versionName = BuildConfig.HEADER_VERSION
        return "Android $versionName"
    }
}

and then

 val retrofit = retrofit2.Retrofit.Builder()
                    .client(httpClient.build())

Now I am want to switch Ktor. My problem is can I reuse okhttp3 HeadersInterceptor() in ktor? if yes, So How can I use please give me example. If no please tell me alternative approach because I have so many Interceptor like AuthorizationInterceptor, own implementation of Interceptor. Thanks


Solution

  • Just add your interceptor to Ktor OkHttp client builder

    val client: HttpClient = HttpClient(OkHttp) {
        engine {
            config {
                addInterceptor( YourInterceptor() )
            }
        }
    }