android - Retrofit2:如何从响应中保存 cookie

标签 android cookies kotlin retrofit2 okhttp

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

它在 postman 中工作 - 我发出授权请求,然后是第二个请求,效果很好。但是,如果我删除 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)
    }
}

有人知道我还能尝试什么吗?

最佳答案

所以,我终于找到了使用 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
}

关于android - Retrofit2:如何从响应中保存 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53430866/

相关文章:

javascript - 使用 Google Analytics 识别回访者

kotlin - 如何在 kotlin 中将数字更改为负数

android - 使用 SpannableString[/Builder] 和富文本

C#:将 CookieContainer 写入磁盘并加载回来使用

c# - 为什么使用 Internet SetCookie 在 Web 浏览器控件上设置 cookie 的这段代码不起作用?

android - 重定向后清除上一个屏幕(清除 fragment 的后退堆栈)kotlin

powershell - 如何从 Kotlin 运行 PowerShell 脚本?

java - SQLiteDatabase.rawQuery 不使用准备好的语句返回正确的结果

Android 支持多种设备和屏幕

android - 如何在 fragment 中使用 AutocompleteSupportFragment