OKHttp 添加 header 仅当它不存在时

OKHttp Add header only if it doesn't already exist

我找不到添加 header 的方法,以防它不存在。 我真正需要的是添加默认 header "Content-Type": "application/json" 但前提是 header 不存在。 一种方法是在需要默认值时使用不同的 Http 客户端或不同的拦截器,但我希望能够检查 header 是否已经存在并仅在它存在的情况下添加它没有。

这绝对是可能的,但这也取决于你在哪里做。

  val i = Interceptor {
    val request = if (it.request().header("A") != null) it.request() else it.request()
      .newBuilder()
      .header("A", "xxx")
      .build()
    
    val response = it.proceed(request)

    if (response.header("A") != null) response else response
      .newBuilder()
      .header("A", "xxx")
      .build()
  }

但是Content-Type比较特殊,因为它通常携带在RequestBody,或者ResponseBody上。 BridgeInterceptor 位于应用程序拦截器和网络拦截器之间。

https://github.com/square/okhttp/blob/5c62ed796d05682c969b2636d3419b5bc214eb11/okhttp/src/jvmMain/kotlin/okhttp3/internal/http/BridgeInterceptor.kt#L43-L46

      val contentType = body.contentType()
      if (contentType != null) {
        requestBuilder.header("Content-Type", contentType.toString())
      }

https://github.com/square/okhttp/blob/5c62ed796d05682c969b2636d3419b5bc214eb11/okhttp/src/jvmMain/kotlin/okhttp3/internal/http/BridgeInterceptor.kt#L102-L103