如何知道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)
答案 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()