diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/network/CloudFlareInterceptor.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/network/CloudFlareInterceptor.kt index 2e2390741..fcf9e51e3 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/network/CloudFlareInterceptor.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/network/CloudFlareInterceptor.kt @@ -3,20 +3,21 @@ package org.koitharu.kotatsu.core.network import okhttp3.Interceptor import okhttp3.Response import okhttp3.internal.closeQuietly +import org.jsoup.Jsoup import org.koitharu.kotatsu.core.exceptions.CloudFlareProtectedException import org.koitharu.kotatsu.parsers.model.MangaSource import java.net.HttpURLConnection.HTTP_FORBIDDEN import java.net.HttpURLConnection.HTTP_UNAVAILABLE -private const val HEADER_SERVER = "Server" -private const val SERVER_CLOUDFLARE = "cloudflare" - class CloudFlareInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val response = chain.proceed(chain.request()) if (response.code == HTTP_FORBIDDEN || response.code == HTTP_UNAVAILABLE) { - if (response.header(HEADER_SERVER)?.startsWith(SERVER_CLOUDFLARE) == true) { + val content = response.body?.source()?.peek()?.use { + Jsoup.parse(it.inputStream(), Charsets.UTF_8.name(), response.request.url.toString()) + } ?: return response + if (content.getElementById("challenge-error-title") != null) { val request = response.request response.closeQuietly() throw CloudFlareProtectedException(