如何在ktor中使用现有的okhttp3拦截器

发布于 2025-01-11 00:55:04 字数 1370 浏览 4 评论 0原文

嘿,我正在 android 和 ios 项目中的 Kotlin Mutliplatorm moblie 工作。当我使用 Retrofit 时,我可以轻松创建拦截器来查看调用:

 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"
    }
}

然后

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

现在我想切换 Ktor。我的问题是我可以在 ktor 中重用 okhttp3 HeadersInterceptor() 吗?如果是,那么我该如何使用,请举个例子。如果没有,请告诉我替代方法,因为我有很多拦截器,例如 AuthorizationInterceptor,自己的拦截器实现。谢谢

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花桑 2025-01-18 00:55:04

只需将您的拦截器添加到 Ktor OkHttp 客户端生成器

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

Just add your interceptor to Ktor OkHttp client builder

val client: HttpClient = HttpClient(OkHttp) {
    engine {
        config {
            addInterceptor( YourInterceptor() )
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文