Retrofit2: как сохранить куки от ответа - PullRequest
0 голосов
/ 22 ноября 2018

Мне нужно добавить информацию об авторизации из cookie в ответ на следующие запросы.

Это работает в почтальоне - я делаю запрос авторизации, затем второй запрос, который работает нормально.Но если я удаляю куки-файлы - второй запрос возвращает ошибку, и мне приходится снова делать запрос авторизации.

Но в моем приложении этот второй запрос всегда возвращает одну и ту же ошибку.Я пытался найти нужный файл cookie с помощью перехватчика, но я не нашел его

val client = OkHttpClient.Builder()
    .addInterceptor(OAuthInterceptor())

private class OAuthInterceptor : Interceptor {
    override fun intercept(chain: Chain): Response {
        val request = chain.request()
        com.app.logic.toLog("${chain.proceed(request).header("set-cookie")} ") // it's not that cookie what I looking for
        val headers = chain.proceed(request).headers()
        headers.names().forEach {
            val s = headers.get(it)
            com.app.logic.toLog("$it -> $s")
        }
        return chain + (Session.authConsumer?.let { consumer ->
            consumer.sign(request).unwrap() as Request
        } ?: request)
    }
}

Кто-нибудь знает, что еще можно попробовать?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Итак, наконец-то я нашел решение для работы с печеньем

val client = OkHttpClient.Builder()
    .cookieJar(UvCookieJar())

private class UvCookieJar : CookieJar {

    private val cookies = mutableListOf<Cookie>()

    override fun saveFromResponse(url: HttpUrl, cookieList: List<Cookie>) {
        cookies.clear()
        cookies.addAll(cookieList)
    }

    override fun loadForRequest(url: HttpUrl): List<Cookie> =
        cookies
}
0 голосов
/ 25 ноября 2018

Вы можете использовать эту эту суть о том, как перехватывать куки, когда вы их получаете, и отправлять их обратно в вашем запросе в заголовке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...