Temporary fix HTTP 103 in OPEX. (#13793)

This commit is contained in:
Alessandro Jean 2022-10-10 13:42:50 -03:00 committed by GitHub
parent 8924c4a6fc
commit 6a417ef285
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 4 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'One Piece Ex' extName = 'One Piece Ex'
pkgNameSuffix = 'pt.opex' pkgNameSuffix = 'pt.opex'
extClass = '.OnePieceEx' extClass = '.OnePieceEx'
extVersionCode = 5 extVersionCode = 6
} }
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"

View File

@ -13,10 +13,13 @@ import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.jsonPrimitive
import okhttp3.Headers import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import rx.Observable import rx.Observable
@ -35,6 +38,7 @@ class OnePieceEx : ParsedHttpSource() {
override val supportsLatest = false override val supportsLatest = false
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(::bypassHttp103Intercept)
.rateLimit(1, 2, TimeUnit.SECONDS) .rateLimit(1, 2, TimeUnit.SECONDS)
.build() .build()
@ -175,15 +179,21 @@ class OnePieceEx : ParsedHttpSource() {
when (mangaUrl.queryParameter("type")!!) { when (mangaUrl.queryParameter("type")!!) {
"main" -> { "main" -> {
name = element.select("span").first()!!.text() name = element.select("span").first()!!.text()
setUrlWithoutDomain(element.select("a.online").first()!!.attr("abs:href")) element.selectFirst("a.online")!!.attr("abs:href")
.substringBefore("?")
.let { setUrlWithoutDomain(it) }
} }
"sbs" -> { "sbs" -> {
name = element.select("div.volume-nome h2").first()!!.text() name = element.select("div.volume-nome h2").first()!!.text()
setUrlWithoutDomain(element.select("header p.extra a:contains(SBS)").first()!!.attr("abs:href")) element.selectFirst("header p.extra a:contains(SBS)")!!.attr("abs:href")
.substringBefore("?")
.let { setUrlWithoutDomain(it) }
} }
"special" -> { "special" -> {
name = element.ownText() name = element.ownText()
setUrlWithoutDomain(element.select("a.online").first()!!.attr("abs:href")) element.select("a.online").first()!!.attr("abs:href")
.substringBefore("?")
.let { setUrlWithoutDomain(it) }
} }
} }
@ -221,6 +231,33 @@ class OnePieceEx : ParsedHttpSource() {
override fun latestUpdatesNextPageSelector() = throw UnsupportedOperationException("Not used") override fun latestUpdatesNextPageSelector() = throw UnsupportedOperationException("Not used")
private fun bypassHttp103Intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
if (request.url.pathSegments[0] != "mangas") {
return chain.proceed(request)
}
val bypasserUrl = "https://translate.google.com/translate".toHttpUrl().newBuilder()
.addQueryParameter("pto", "op")
.addQueryParameter("u", request.url.toString())
.build()
val bypasserRequest = request.newBuilder()
.url(bypasserUrl)
.build()
val bypasserResponse = chain.proceed(bypasserRequest)
val fixedBody = bypasserResponse.body?.string().orEmpty()
.replace("onepieceex-net.translate.goog", baseUrl.removePrefix("https://"))
.toResponseBody(bypasserResponse.body!!.contentType())
return bypasserResponse.newBuilder()
.body(fixedBody)
.request(request)
.build()
}
companion object { companion object {
private const val ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9," + private const val ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9," +
"image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" "image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"