Fix captcha detection
This commit is contained in:
@@ -3,20 +3,21 @@ package org.koitharu.kotatsu.core.network
|
|||||||
import okhttp3.Interceptor
|
import okhttp3.Interceptor
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import okhttp3.internal.closeQuietly
|
import okhttp3.internal.closeQuietly
|
||||||
|
import org.jsoup.Jsoup
|
||||||
import org.koitharu.kotatsu.core.exceptions.CloudFlareProtectedException
|
import org.koitharu.kotatsu.core.exceptions.CloudFlareProtectedException
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
import java.net.HttpURLConnection.HTTP_FORBIDDEN
|
import java.net.HttpURLConnection.HTTP_FORBIDDEN
|
||||||
import java.net.HttpURLConnection.HTTP_UNAVAILABLE
|
import java.net.HttpURLConnection.HTTP_UNAVAILABLE
|
||||||
|
|
||||||
private const val HEADER_SERVER = "Server"
|
|
||||||
private const val SERVER_CLOUDFLARE = "cloudflare"
|
|
||||||
|
|
||||||
class CloudFlareInterceptor : Interceptor {
|
class CloudFlareInterceptor : Interceptor {
|
||||||
|
|
||||||
override fun intercept(chain: Interceptor.Chain): Response {
|
override fun intercept(chain: Interceptor.Chain): Response {
|
||||||
val response = chain.proceed(chain.request())
|
val response = chain.proceed(chain.request())
|
||||||
if (response.code == HTTP_FORBIDDEN || response.code == HTTP_UNAVAILABLE) {
|
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
|
val request = response.request
|
||||||
response.closeQuietly()
|
response.closeQuietly()
|
||||||
throw CloudFlareProtectedException(
|
throw CloudFlareProtectedException(
|
||||||
|
|||||||
Reference in New Issue
Block a user