Retrofit2:如何保存响应中的cookie

时间:2018-11-22 12:18:47

标签: android cookies kotlin retrofit2 okhttp

我需要从cookie中添加一些授权信息,以响应下一个请求。

它适用于邮递员-我先提出授权请求,然后再提出第二次请求,这很好。但是,如果我删除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 :(得分:1)

您可以使用此this gist来了解如何在接收到cookie时拦截它们,并将其发送回标头中的请求。

答案 1 :(得分:0)

所以,终于找到了使用Cookie的解决方案

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
}