From 96bac81b8459ad7d213dc61a7f8f498ee5835144 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Fri, 11 Aug 2023 15:13:25 +0300 Subject: [PATCH] Fix captcha detection --- .../kotatsu/core/network/CloudFlareInterceptor.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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(