Hiperdex: Fix http 403 and blocked in WebView (#11744)

* fix 403

* bump

* use cf-ray header
This commit is contained in:
bapeey 2025-11-21 17:26:03 -05:00 committed by Draff
parent e17d796fc1
commit e595780f24
Signed by: Draff
GPG Key ID: E8A89F3211677653
3 changed files with 48 additions and 2 deletions

View File

@ -3,7 +3,7 @@ ext {
extClass = '.Hiperdex'
themePkg = 'madara'
baseUrl = 'https://hiperdex.com'
overrideVersionCode = 22
overrideVersionCode = 23
isNsfw = true
}

View File

@ -0,0 +1,45 @@
package eu.kanade.tachiyomi.extension.en.hiperdex
import okhttp3.Interceptor
import okhttp3.Response
class ClearanceInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val hasClearanceCookie = request.headers("Cookie").any { cookieHeader ->
cookieHeader.split(";").any { cookie ->
cookie.trim().startsWith("$COOKIE_NAME=")
}
}
if (hasClearanceCookie) return chain.proceed(request)
val response = chain.proceed(request)
if (response.code == 403 && response.header(CF_RAY_HEADER) != null) {
val hasClearanceInResponse = response.headers("Set-Cookie").any { cookieHeader ->
cookieHeader.split(";").any { cookie ->
cookie.trim().startsWith("$COOKIE_NAME=")
}
}
if (hasClearanceInResponse) return response
val newResponse = response.newBuilder()
.header(
"Set-Cookie",
"$COOKIE_NAME=; Path=/; Domain=${request.url.host}",
)
.body(response.body)
.build()
return newResponse
}
return response
}
companion object {
private const val COOKIE_NAME = "cf_clearance"
private const val CF_RAY_HEADER = "cf-ray"
}
}

View File

@ -37,6 +37,7 @@ class Hiperdex :
override val baseUrl by lazy { getPrefBaseUrl() }
override val client = super.client.newBuilder()
.addNetworkInterceptor(ClearanceInterceptor())
.setRandomUserAgent(
preferences.getPrefUAType(),
preferences.getPrefCustomUA(),
@ -44,7 +45,7 @@ class Hiperdex :
.rateLimit(3)
.build()
override val useLoadMoreRequest = LoadMoreStrategy.Never
override val useLoadMoreRequest = LoadMoreStrategy.Always
override fun setupPreferenceScreen(screen: PreferenceScreen) {
EditTextPreference(screen.context).apply {