|
|
|
@ -3,7 +3,6 @@ package org.koitharu.kotatsu.parsers
|
|
|
|
import okhttp3.Interceptor
|
|
|
|
import okhttp3.Interceptor
|
|
|
|
import okhttp3.Response
|
|
|
|
import okhttp3.Response
|
|
|
|
import okhttp3.internal.closeQuietly
|
|
|
|
import okhttp3.internal.closeQuietly
|
|
|
|
import org.koitharu.kotatsu.parsers.exception.CloudFlareProtectedException
|
|
|
|
|
|
|
|
import java.net.HttpURLConnection
|
|
|
|
import java.net.HttpURLConnection
|
|
|
|
|
|
|
|
|
|
|
|
private const val HEADER_SERVER = "Server"
|
|
|
|
private const val HEADER_SERVER = "Server"
|
|
|
|
@ -11,18 +10,18 @@ private const val SERVER_CLOUDFLARE = "cloudflare"
|
|
|
|
|
|
|
|
|
|
|
|
internal class CloudFlareInterceptor : Interceptor {
|
|
|
|
internal class CloudFlareInterceptor : Interceptor {
|
|
|
|
|
|
|
|
|
|
|
|
override fun intercept(chain: Interceptor.Chain): Response {
|
|
|
|
override fun intercept(chain: Interceptor.Chain): Response {
|
|
|
|
val request = chain.request()
|
|
|
|
val request = chain.request()
|
|
|
|
val response = chain.proceed(request)
|
|
|
|
val response = chain.proceed(request)
|
|
|
|
if (response.code == HttpURLConnection.HTTP_FORBIDDEN || response.code == HttpURLConnection.HTTP_UNAVAILABLE) {
|
|
|
|
if (response.code == HttpURLConnection.HTTP_FORBIDDEN || response.code == HttpURLConnection.HTTP_UNAVAILABLE) {
|
|
|
|
if (response.header(HEADER_SERVER)?.startsWith(SERVER_CLOUDFLARE) == true) {
|
|
|
|
if (response.header(HEADER_SERVER)?.startsWith(SERVER_CLOUDFLARE) == true) {
|
|
|
|
response.closeQuietly()
|
|
|
|
response.closeQuietly()
|
|
|
|
throw CloudFlareProtectedException(
|
|
|
|
throw CloudFlareProtectedException(
|
|
|
|
url = response.request.url.toString(),
|
|
|
|
url = response.request.url.toString(),
|
|
|
|
headers = request.headers,
|
|
|
|
headers = request.headers,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return response
|
|
|
|
return response
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|