Назад к вопросам
Middle+
78
questionbank

Как изменить все запросы в библиотеке Ретрофит?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Перехватчик (Interceptor). Добавляется к OkHttpClient, который используется Retrofit'ом. Перехватчик может изменять запрос перед отправкой и ответ перед обработкой.

interface Interceptor {
    fun intercept(chain: Interceptor.Chain): Response
}

Создать свою реализацию Interceptor и добавить ее в OkHttpClient.Builder:

class MyChangingInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val originalRequest = chain.request()
        val newRequest = originalRequest.newBuilder()
            // Пример: добавить заголовок
            .addHeader("X-Custom-Header", "SomeValue")
            // Пример: изменить URL
            // .url("https://new.api.com" + originalRequest.url.encodedPath)
            // Пример: изменить метод (если нужно)
            // .method("POST", originalRequest.body)
            .build()
        return chain.proceed(newRequest)
    }
}

Добавить перехватчик в OkHttpClient:

val client = OkHttpClient.Builder()
    .addInterceptor(MyChangingInterceptor())
    // Можно добавить несколько перехватчиков
    // .addInterceptor(AnotherInterceptor())
    .build()

Использовать созданный OkHttpClient при создании экземпляра Retrofit:

val retrofit = Retrofit.Builder()
    .baseUrl("https://your.api.com/")
    .client(client)
    .addConverterFactory(GsonConverterFactory.create())
    .build()