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?

您可以使用 maptoHeaders() 扩展函数将您的 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())