【问题标题】:Android Retrofit OkHttpClient Interceptor Add Header Gets Error "HTTP 403 Forbidden"Android Retrofit OkHttpClient 拦截器添加标头获取错误“HTTP 403 Forbidden”
【发布时间】:2021-09-13 14:59:19
【问题描述】:

所以,我的目标是将api key 嵌入到我的Retrofit 对象中,这样我就不需要在每个请求函数 中手动将其作为查询参数附加,然后我做了以下(学习:https://proandroiddev.com/headers-in-retrofit-a8d71ede2f3e):

private val interceptor = Interceptor { chain ->
    val newRequest = chain.request().newBuilder().run {
        addHeader("api_key", Constants.API_KEY)
        build()
    }

    chain.proceed(newRequest)
}

private val okHttpClient = OkHttpClient.Builder().run {
    connectTimeout(15, TimeUnit.SECONDS)
    readTimeout(15, TimeUnit.SECONDS)
    addInterceptor(interceptor)    //<- apply Interceptor
    build()
}

//apply the okHttpClient to my Retrofit object...

但它失败并给出了这个错误:HTTP 403 Forbidden

PS:在添加此 Interceptor 之前一切正常


之前:

@GET("neo/rest/v1/feed")
suspend fun getAsteroidsResult(
    @Query("start_date") startDate: String,
    @Query("end_date") endDate: String, 
    @Query("api_key") apiKey: String = Constants.API_KEY
): ResponseBody 

【问题讨论】:

  • 能分享一下之前是怎么添加api_key的吗?
  • @eimmer 已更新。
  • 您的第一种方法是将 api_key 添加为查询参数。第二种方法是将其添加为标题。她们不一样。在这里阅读更多。 stackoverflow.com/questions/40492782/…
  • @eimmer 但是我提到的那篇文章呢?
  • 这篇文章似乎只概述了如何向标题添加值。我错过了一些相关的东西吗?

标签: android retrofit retrofit2 okhttp


【解决方案1】:

能否请您添加日志拦截器并设置日志级别并提供日志?

 compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'

还有这样的:

 OkHttpClient.Builder okBuilder = new OkHttpClient.Builder();
     okBuilder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC).setLevel
             (HttpLoggingInterceptor.Level.BODY).setLevel(HttpLoggingInterceptor.Level.HEADERS))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多