首页 > 解决方案 > 改造拦截器未将查询参数添加到 URL

问题描述

我正在尝试使用自定义在 URL 中添加 apikey,interceptor但它没有在 URL 中添加参数,因此响应正文为空。

自定义拦截器

class CustomInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {

        val url = chain.request().url().newBuilder()
            .addQueryParameter("apiKey", API_KEY)
            .build()

        val request = chain.request().newBuilder()
            .url(url)
            .build()

        return chain.proceed(request)
    }
}

客户

class Client {

    companion object {

        const val API_KEY = "123123"
        private const val apiUrl = "https://www.omdbapi.com/"

        fun <T> create(service: Class<T>): T {
            val client = OkHttpClient.Builder()
                .addInterceptor(CustomInterceptor())
                .build()

            return Retrofit.Builder()
                .baseUrl(apiUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build()
                .create(service)
        }
    }
}

电影

interface IMovie {

    @GET("/")
    fun searchMovie(@Query("s") query: String): Call<SearchResult>
}

发送请求后,响应正文为空,这是

实际网址:- https://www.omdbapi.com/?s=Man

预期网址:- https://www.omdbapi.com/?s=Man&apikey=123123

标签: androidkotlinretrofit

解决方案


首先从现有请求创建一个新的 httpUrl 实例,添加您的查询参数和值:

var request = chain.request()

val httpUrl = request.url().newBuilder().addQueryParameter("token", authToken).build()

然后更新请求:

request = request.newBuilder().url(httpUrl).build()

并继续它:

return chain.proceed(request)

  • 当您从链中调用请求(您在操作后继续执行的请求)时,您将再次获得未修改的请求。

推荐阅读