watabee's blog

プログラミング関連のブログです

【Android】OkHttpのInterceptorで全ての通信リクエストに一括でパラメーターを追加する

実装メモ。

例えばリクエストパラメーターにアプリのバージョンを追加する場合。

class AddRequestParamsInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val request = chain.request()
        val newRequest = when (val method = request.method()) {
            "GET" -> {
                val originalUrl = request.url()
                val newUrl = originalUrl.newBuilder()
                    .addQueryParameter("version", BuildConfig.VERSION_NAME)
                    .build()
                request.newBuilder().url(newUrl).build()
            }
            else -> {
                val requestBuilder = request.newBuilder()
                val buffer = Buffer()

                FormBody.Builder()
                    .add("version", BuildConfig.VERSION_NAME)
                    .build()
                    .writeTo(buffer)
                
                request.body()?.let {
                    buffer.write("&".toByteArray())
                    it.writeTo(buffer)
                }
                    
                val requestBody = RequestBody.create(
                    MediaType.parse("application/x-www-form-urlencoded;charset=UTF-8"),
                    buffer.readUtf8()
                )

                requestBuilder.method(method, requestBody).build()
            }
        }

        return chain.proceed(newRequest)
    }
}