【发布时间】:2021-08-13 11:16:09
【问题描述】:
我正在使用带有 OkHttp 拦截器的 Retrofit 来处理 API。 拦截器向每个请求添加 cookie 标头。 拦截器代码:
class AddCookiesInterceptor: Interceptor {
@Inject
lateinit var cookiesDao: CookiesDao
init {
App.getAppComponent().inject(this)
}
@SuppressLint("CheckResult")
override fun intercept(chain: Interceptor.Chain): Response {
val builder = chain.request().newBuilder()
cookiesDao.getAll()
.subscribeOn(Schedulers.io())
.subscribe { cookies ->
builder.addHeader("Cookie", "JWT=" + cookies.jwt)
}
return chain.proceed(builder.build())
}
}
在调试时我看到,拦截器更新请求并添加带有值的 cookie 标头,但是当服务器到达请求时它返回错误(再次 400 http 代码身份验证)。 如果我像这样手动将标头添加到请求中
@GET("/api.tree/get_element/")
@Headers("Content-type: application/json", "X-requested-with: XMLHttpRequest", "Cookie: jwt_value")
fun getElementId(): Maybe<ResponseBody>
Api 返回 200 个 http 代码,它可以工作。
【问题讨论】:
-
如果省略
"JWT=" +会怎样? -
@Jameido 请求需要授权。没有令牌 (JWT) 服务器返回“400 - 错误请求”和消息“再次授权”
-
我的意思是这样做
builder.addHeader("Cookie", cookies.jwt)