【问题标题】:Android HTTP Headers with API带有 API 的 Android HTTP 标头
【发布时间】:2022-11-29 05:40:54
【问题描述】:

如果我想发布请求和响应,标头有什么用? 怎么可能在那里“保存”令牌?

我找不到任何好的解释。

【问题讨论】:

    标签: android kotlin retrofit2 okhttp


    【解决方案1】:

    您可以使用 Retrofit 调用 api 并将令牌存储到共享首选项中,并将通用标头添加到 OkhttpClient

            val prefs = Prefs.getInstance();
    
            val httpClient = OkHttpClient.Builder()
            httpClient.addInterceptor { chain ->
                val original = chain.request()
                val request = original.newBuilder()
                    .header("Authorization", prefs.token)
                    .header("Accept", "application/json")
                    .method(original.method, original.body)
                    .build()
                chain.proceed(request)
            }
            val interceptor = HttpLoggingInterceptor()
            interceptor.level = HttpLoggingInterceptor.Level.BODY
            httpClient.addInterceptor(interceptor)
    
            val client = httpClient.build()
    

    并像这样制作 Retrofit 对象

    Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(
                    GsonConverterFactory.create(
                        GsonBuilder().setPrettyPrinting().create()
                    )
                )
                .client(client).build()
    

    【讨论】:

    • 谢谢。我现在明白令牌应该保存在共享首选项中。我看到添加了标头“授权”,并且从共享首选项中提取了令牌。但是为什么拦截器呢?如果我得到 1 个访问令牌和 1 个刷新令牌怎么办?有点混乱
    • 拦截器用于记录目的或重写请求/响应。结帐:square.github.io/okhttp/features/interceptors 对于令牌和刷新令牌,您可以根据需要添加尽可能多的标头,后端将仅获取必要的标头。
    • 例如,这是添加带有刷新令牌的新标头的方法吗? .header("授权", prefs.token + prefs.refresh token)
    • 不,这是构建器模式,你需要像 .header("Authorization", prefs.token).header("HEADER_NAME", prefs.refreshtoken)
    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多