带有OkHttp的HTTP版本

时间:2019-04-18 13:07:50

标签: android http kotlin okhttp

如何知道Android App中的OkHttp使用哪个版本的HTTP(第一个或第二个-HTTP / 1或HTTP / 2)?

是否可以通过OkHttp日志定义如下?

D/OkHttp: <-- 200 OK https://someurl (1009ms)
D/OkHttp: Date: Thu, 10 Apr 2019 13:02:27 GMT
D/OkHttp: Content-Type: application/json; charset=utf-8
D/OkHttp: Transfer-Encoding: chunked
D/OkHttp: Connection: keep-alive
...
D/OkHttp: Cache-Control: max-age=0
D/OkHttp: {json_string}
D/OkHttp: <-- END HTTP (664-byte body)

2 个答案:

答案 0 :(得分:1)

在响应对象上尝试protocol()函数。 示例:

val client = OkHttpClient()
val request = Request.Builder().url("https://samplepage.com").build()
val response = client.newCall(request).execute()
System.out.println("protocol: " + response.protocol())

答案 1 :(得分:0)

尝试:

import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit

fun createNetworkClient(baseUrl: String, pref: PreferencesHelper) =
    retrofitClient(baseUrl, httpClient(pref))


private fun httpClient(pref: PreferencesHelper): OkHttpClient {
    val httpLoggingInterceptor = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger.DEFAULT)
    val clientBuilder = OkHttpClient.Builder()
    if (BuildConfig.DEBUG) {
        httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
        clientBuilder.addInterceptor(httpLoggingInterceptor)
    }
    clientBuilder.addInterceptor { chain ->
        val newRequest = chain.request().newBuilder()
            .addHeader(
                "Authorization", pref.accessToken!!
            )
            .build()
        chain.proceed(newRequest)
    }
    clientBuilder.readTimeout(120, TimeUnit.SECONDS)
    clientBuilder.writeTimeout(120, TimeUnit.SECONDS)
    return clientBuilder.build()
}

private fun retrofitClient(baseUrl: String, httpClient: OkHttpClient): Retrofit =
    Retrofit.Builder()
        .baseUrl(baseUrl)
        .client(httpClient)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build()