Код: Выделить всё
@OptIn(ExperimentalSerializationApi::class)
@Singleton
@Provides
fun provideHttpClient(
localService: LocalService,
): HttpClient {
val chuckerInterceptor = ChuckerInterceptor.Builder(App.appContext)
.collector(ChuckerCollector(App.appContext))
.maxContentLength(250000L)
.redactHeaders(emptySet())
.alwaysReadResponseBody(false)
.build()
val okhttpEngine = OkHttp.create {
addInterceptor(chuckerInterceptor)
}
return HttpClient(okhttpEngine) {
install(ContentNegotiation) {
json(
Json {
prettyPrint = true
isLenient = true
useAlternativeNames = true
ignoreUnknownKeys = true
encodeDefaults = false
explicitNulls = false
}
)
}
install(HttpTimeout) {
requestTimeoutMillis = 10_000
connectTimeoutMillis = 10_000
socketTimeoutMillis = 10_000
}
install(Logging) {
logger = object : Logger {
override fun log(message: String) {
Log.v("Logger Ktor =>", message)
}
}
level = LogLevel.ALL
}
install(ResponseObserver) {
onResponse { response ->
Log.d("HTTP status:", "${response.status.value}")
}
}
install(DefaultRequest) {
header(HttpHeaders.ContentType, ContentType.Application.Json)
}
defaultRequest {
contentType(ContentType.Application.Json)
accept(ContentType.Application.Json)
}
install(Auth) {
bearer {
refreshTokens {
val token = client.get {
markAsRefreshTokenRequest()
url(BASE_URL + REFRESH_TOKEN)
parameter("refreshToken", localService.getRefreshToken())
}.body()
BearerTokens(
accessToken = token.accessToken.token,
refreshToken = token.refreshToken.token
)
}
loadTokens {
BearerTokens(
accessToken = localService.getAccessToken().orEmpty(),
refreshToken = localService.getRefreshToken().orEmpty(),
)
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/780 ... ceiving-it
Мобильная версия