| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package com.example.modifier.http
- import com.example.modifier.Global
- import com.example.modifier.http.response.ErrorResponse
- import io.ktor.client.HttpClient
- import io.ktor.client.call.body
- import io.ktor.client.engine.okhttp.OkHttp
- import io.ktor.client.plugins.ClientRequestException
- import io.ktor.client.plugins.HttpResponseValidator
- import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
- import io.ktor.client.plugins.defaultRequest
- import io.ktor.client.plugins.resources.Resources
- import io.ktor.serialization.kotlinx.json.json
- import kotlinx.serialization.ExperimentalSerializationApi
- import kotlinx.serialization.json.Json
- @OptIn(ExperimentalSerializationApi::class)
- val KtorClient = HttpClient(OkHttp) {
- defaultRequest {
- Global.load()
- url(Global.serverUrl.endsWith("/").let {
- if (it) Global.serverUrl else "${Global.serverUrl}/"
- })
- }
- install(Resources)
- install(ContentNegotiation) {
- json(Json {
- prettyPrint = true
- isLenient = true
- ignoreUnknownKeys = true
- explicitNulls = false
- })
- }
- HttpResponseValidator {
- handleResponseExceptionWithRequest { exception, request ->
- val clientException =
- exception as? ClientRequestException ?: return@handleResponseExceptionWithRequest
- val exceptionResponse = clientException.response
- val err = exceptionResponse.body<ErrorResponse>()
- throw Exception(err.message ?: "Unknown error")
- }
- }
- }
|