Dynamic UserAgent support
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user