This commit is contained in:
kunfei
2023-02-16 08:35:54 +08:00
parent c60fdc9ffb
commit 9fa726d2b5
@@ -13,43 +13,46 @@ class CronetInterceptor(private val cookieJar: CookieJar) : Interceptor {
@Throws(IOException::class) @Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response { override fun intercept(chain: Interceptor.Chain): Response {
if (chain.call().isCanceled()) {
throw IOException("Canceled")
}
val original: Request = chain.request() val original: Request = chain.request()
//Cronet未初始化 try {
return if (!CronetLoader.install() || cronetEngine == null) { if (chain.call().isCanceled()) {
chain.proceed(original) return chain.proceed(original)
} else try { }
val builder: Request.Builder = original.newBuilder() //Cronet未初始化
//移除Keep-Alive,手动设置会导致400 BadRequest return if (!CronetLoader.install() || cronetEngine == null) {
builder.removeHeader("Keep-Alive") chain.proceed(original)
builder.removeHeader("Accept-Encoding") } else try {
if (cookieJar != CookieJar.NO_COOKIES) { val builder: Request.Builder = original.newBuilder()
val cookieStr = getCookie(original.url) //移除Keep-Alive,手动设置会导致400 BadRequest
//设置Cookie builder.removeHeader("Keep-Alive")
if (cookieStr.length > 3) { builder.removeHeader("Accept-Encoding")
builder.addHeader("Cookie", cookieStr) if (cookieJar != CookieJar.NO_COOKIES) {
val cookieStr = getCookie(original.url)
//设置Cookie
if (cookieStr.length > 3) {
builder.addHeader("Cookie", cookieStr)
}
} }
}
val newReq = builder.build() val newReq = builder.build()
proceedWithCronet(newReq, chain.call())?.let { response -> proceedWithCronet(newReq, chain.call())?.let { response ->
//从Response 中保存Cookie到CookieJar //从Response 中保存Cookie到CookieJar
cookieJar.receiveHeaders(newReq.url, response.headers) cookieJar.receiveHeaders(newReq.url, response.headers)
response response
} ?: chain.proceed(original) } ?: chain.proceed(original)
} catch (e: Exception) {
//不能抛出错误,抛出错误会导致应用崩溃
//遇到Cronet处理有问题时的情况,如证书过期等等,回退到okhttp处理
if (!e.message.toString().contains("ERR_CERT_", true)
&& !e.message.toString().contains("ERR_SSL_", true)
) {
e.printOnDebug()
}
chain.proceed(original)
}
} catch (e: Exception) { } catch (e: Exception) {
//不能抛出错误,抛出错误会导致应用崩溃 return chain.proceed(original)
//遇到Cronet处理有问题时的情况,如证书过期等等,回退到okhttp处理
if (!e.message.toString().contains("ERR_CERT_", true)
&& !e.message.toString().contains("ERR_SSL_", true)
) {
e.printOnDebug()
}
chain.proceed(original)
} }
} }
private fun proceedWithCronet(request: Request, call: Call): Response? { private fun proceedWithCronet(request: Request, call: Call): Response? {