Dynamic UserAgent support

Koitharu 2 years ago
parent 69e7efe6d1
commit 103ef11f3d
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -29,4 +29,6 @@ abstract class MangaLoaderContext {
abstract suspend fun evaluateJs(script: String): String?
abstract fun getConfig(source: MangaSource): MangaSourceConfig
abstract fun getDefaultUserAgent(): String
}

@ -76,7 +76,7 @@ abstract class MangaParser @InternalParsersApi constructor(
abstract val configKeyDomain: ConfigKey.Domain
open val headers: Headers = Headers.Builder()
.add("User-Agent", UserAgents.DEFAULT_BROWSER)
.add("User-Agent", context.getDefaultUserAgent())
.build()
/**

@ -2,7 +2,6 @@ package org.koitharu.kotatsu.parsers.network
object UserAgents {
@Deprecated("Issues with CloudFlare", replaceWith = ReplaceWith("UserAgents.DEFAULT_BROWSER"))
const val CHROME_MOBILE =
"Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 Mobile Safari/537.36"
@ -14,7 +13,4 @@ object UserAgents {
const val FIREFOX_DESKTOP = "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0"
const val KOTATSU = "Kotatsu/6.8 (Android 13;;; en)"
const val DEFAULT_BROWSER = FIREFOX_MOBILE
}

@ -24,10 +24,6 @@ internal class LegacyScansParser(context: MangaLoaderContext) :
override val configKeyDomain = ConfigKey.Domain("legacy-scans.com")
override val headers: Headers = Headers.Builder()
.add("User-Agent", UserAgents.DEFAULT_BROWSER)
.build()
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
val end = page * pageSize
val start = end - (pageSize - 1)

@ -20,10 +20,6 @@ internal class LireScan(context: MangaLoaderContext) : PagedMangaParser(context,
override val isMultipleTagsSupported = false
override val headers: Headers = Headers.Builder()
.add("User-Agent", UserAgents.DEFAULT_BROWSER)
.build()
override suspend fun getListPage(page: Int, filter: MangaListFilter?): List<Manga> {
val doc =

@ -8,7 +8,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.network.UserAgents
import org.koitharu.kotatsu.parsers.site.galleryadults.GalleryAdultsParser
import org.koitharu.kotatsu.parsers.util.*
import java.util.*
@ -31,7 +30,7 @@ internal class NHentaiParser(context: MangaLoaderContext) :
override val isMultipleTagsSupported = true
private val userAgentKey = ConfigKey.UserAgent(UserAgents.DEFAULT_BROWSER)
private val userAgentKey = ConfigKey.UserAgent(context.getDefaultUserAgent())
override val headers: Headers
get() = super.headers.newBuilder()

@ -12,7 +12,7 @@ import java.util.*
internal class Shinigami(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.SHINIGAMI, "shinigamitoon.com", 10) {
private val userAgentKey = ConfigKey.UserAgent(UserAgents.DEFAULT_BROWSER)
private val userAgentKey = ConfigKey.UserAgent(context.getDefaultUserAgent())
override val tagPrefix = "genre/"
override val listUrl = "series/"
override val sourceLocale: Locale = Locale.ENGLISH

@ -32,7 +32,7 @@ internal class RemangaParser(
context: MangaLoaderContext,
) : PagedMangaParser(context, MangaSource.REMANGA, PAGE_SIZE), MangaParserAuthProvider, Interceptor {
private val userAgentKey = ConfigKey.UserAgent(UserAgents.DEFAULT_BROWSER)
private val userAgentKey = ConfigKey.UserAgent(context.getDefaultUserAgent())
private val baseHeaders: Headers
get() = Headers.Builder()

@ -26,7 +26,7 @@ class HentaiVNParser(context: MangaLoaderContext) : MangaParser(context, MangaSo
override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("hentaivn.red", "hentaivn.autos", "hentaivn.tv")
// hentaivn has created 2 different interfaces for mobile and desktop, and Cloudflare detects whether it's mobile or not even with a desktop user agent.
override val headers: Headers = Headers.Builder().add("User-Agent", UserAgents.DEFAULT_BROWSER).build()
override val headers: Headers = Headers.Builder().add("User-Agent", UserAgents.CHROME_MOBILE).build()
override val availableSortOrders: Set<SortOrder> = EnumSet.of(
SortOrder.UPDATED,

@ -6,6 +6,7 @@ import okhttp3.Request
import okhttp3.Response
import org.koitharu.kotatsu.parsers.config.MangaSourceConfig
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.network.UserAgents
import org.koitharu.kotatsu.parsers.util.await
import java.security.SecureRandom
import java.security.cert.X509Certificate
@ -42,6 +43,8 @@ internal object MangaLoaderContextMock : MangaLoaderContext() {
return SourceConfigMock()
}
override fun getDefaultUserAgent(): String = UserAgents.FIREFOX_MOBILE
suspend fun doRequest(url: String, source: MangaSource?): Response {
val request = Request.Builder()
.get()

Loading…
Cancel
Save