android - 改造拦截器未将查询参数添加到 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>
}
发送请求后,响应正文为空,这是
解决方案
首先从现有请求创建一个新的 httpUrl 实例,添加您的查询参数和值:
var request = chain.request()
val httpUrl = request.url().newBuilder().addQueryParameter("token", authToken).build()
然后更新请求:
request = request.newBuilder().url(httpUrl).build()
并继续它:
return chain.proceed(request)
- 当您从链中调用请求(您在操作后继续执行的请求)时,您将再次获得未修改的请求。
推荐阅读
- oracle - 使用 DBMS_CRYPTO 但表存在时出现奇怪的 ORA-942
- algorithm - 这些算法表示之间的区别?
- python - 有没有更快的方法来搜索一个值是否在给定区间列表的区间内?
- powershell - 使用 System.Diagnostics.Process 在标准输入上向 Plink 输入 ay?
- python - 更改用户指定目录中的文件名
- r-markdown - 在 blogdown 中使插入的图像适合内容 div
- javascript - JS:Facebook 登录 SDK 不返回电子邮件
- c++ - pair 和 vector 在 Graph 实现中是如何工作的?
- python - Matplotlib:使轴适合形状限制
- ios - Spritekit 动画没有改变