Kotlin okhttp 动态 header
Kotlin okhttp dynamic header
我正在使用 okhttp(不是改装)向 api 提出我的所有请求。它工作得很好,但我在制作 dynamique header 时遇到了一些麻烦。这是我所做的:
private fun buildRequest(url: String, methode: Method = Method.GET, filters: Map<String, String> = mapOf(): Request? {
var builder = FormBody.Builder()
builder.add("body", "test")
val request = Request.Builder()
.url(url)
.addHeader("API-Key", apikey)
.post(formBody)
.build()
}
问题是我有一个地图过滤器代表我需要添加的一些 header,但它们不是硬编码的,但它们是动态的,例如:
var filters = mapOf("limit" to "10", "sort" to "date")
但是我不能为过滤器做一个静态的 addHeader,因为我不知道我是否要有一些或者它们将会是什么。
我的想法是像这样使用 newBuilder :
if (!filters.isNullOrEmpty()){
filters.forEach{
request.newBuilder()
request.addHeader(it.key, it.value)
.build()
}
问题是这不会将我的新 header 添加到通话中。我缺少有关如何使用 newBuilder 的内容吗?或者有没有办法用 okhttp 管理动态 header?
您可以使用 map
的 toHeaders()
扩展函数将您的 map
object 转换为 Headers
。
所有 key-value 对地图都可以像这样轻松添加到 headers
val request = Request.Builder()
.url(url)
.headers(filters.toHeaders())
Note - Using headers()
would replace all previously added headers of
the request builder.
您也可以稍后将 headers 添加到 request
构建器,使用 newBuilder()
request.newBuilder()
.headers(filters.toHeaders())
我正在使用 okhttp(不是改装)向 api 提出我的所有请求。它工作得很好,但我在制作 dynamique header 时遇到了一些麻烦。这是我所做的:
private fun buildRequest(url: String, methode: Method = Method.GET, filters: Map<String, String> = mapOf(): Request? {
var builder = FormBody.Builder()
builder.add("body", "test")
val request = Request.Builder()
.url(url)
.addHeader("API-Key", apikey)
.post(formBody)
.build()
}
问题是我有一个地图过滤器代表我需要添加的一些 header,但它们不是硬编码的,但它们是动态的,例如:
var filters = mapOf("limit" to "10", "sort" to "date")
但是我不能为过滤器做一个静态的 addHeader,因为我不知道我是否要有一些或者它们将会是什么。
我的想法是像这样使用 newBuilder :
if (!filters.isNullOrEmpty()){
filters.forEach{
request.newBuilder()
request.addHeader(it.key, it.value)
.build()
}
问题是这不会将我的新 header 添加到通话中。我缺少有关如何使用 newBuilder 的内容吗?或者有没有办法用 okhttp 管理动态 header?
您可以使用 map
的 toHeaders()
扩展函数将您的 map
object 转换为 Headers
。
所有 key-value 对地图都可以像这样轻松添加到 headers
val request = Request.Builder()
.url(url)
.headers(filters.toHeaders())
Note - Using
headers()
would replace all previously added headers of the request builder.
您也可以稍后将 headers 添加到 request
构建器,使用 newBuilder()
request.newBuilder()
.headers(filters.toHeaders())