|
|
@ -1,6 +1,7 @@ |
|
|
|
package io.legado.app.model.analyzeRule |
|
|
|
package io.legado.app.model.analyzeRule |
|
|
|
|
|
|
|
|
|
|
|
import android.annotation.SuppressLint |
|
|
|
import android.annotation.SuppressLint |
|
|
|
|
|
|
|
import android.util.Base64 |
|
|
|
import androidx.annotation.Keep |
|
|
|
import androidx.annotation.Keep |
|
|
|
import com.bumptech.glide.load.model.GlideUrl |
|
|
|
import com.bumptech.glide.load.model.GlideUrl |
|
|
|
import com.bumptech.glide.load.model.LazyHeaders |
|
|
|
import com.bumptech.glide.load.model.LazyHeaders |
|
|
@ -461,9 +462,17 @@ class AnalyzeUrl( |
|
|
|
* 访问网站,返回ByteArray |
|
|
|
* 访问网站,返回ByteArray |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
suspend fun getByteArrayAwait(): ByteArray { |
|
|
|
suspend fun getByteArrayAwait(): ByteArray { |
|
|
|
|
|
|
|
val dataUriRegex = Regex("data:[\\w/\\-\\.]+;base64,(.*)") |
|
|
|
|
|
|
|
val dataUriFindResult = dataUriRegex.find(urlNoQuery) |
|
|
|
val concurrentRecord = fetchStart() |
|
|
|
val concurrentRecord = fetchStart() |
|
|
|
setCookie(source?.getKey()) |
|
|
|
setCookie(source?.getKey()) |
|
|
|
@Suppress("BlockingMethodInNonBlockingContext") |
|
|
|
@Suppress("BlockingMethodInNonBlockingContext") |
|
|
|
|
|
|
|
if (dataUriFindResult != null){ |
|
|
|
|
|
|
|
val dataUriBase64 = dataUriFindResult.groupValues?.get(1) |
|
|
|
|
|
|
|
val byteArray = Base64.decode(dataUriBase64, Base64.DEFAULT) |
|
|
|
|
|
|
|
fetchEnd(concurrentRecord) |
|
|
|
|
|
|
|
return byteArray |
|
|
|
|
|
|
|
}else { |
|
|
|
val byteArray = getProxyClient(proxy).newCallResponseBody(retry) { |
|
|
|
val byteArray = getProxyClient(proxy).newCallResponseBody(retry) { |
|
|
|
addHeaders(headerMap) |
|
|
|
addHeaders(headerMap) |
|
|
|
when (method) { |
|
|
|
when (method) { |
|
|
@ -486,6 +495,7 @@ class AnalyzeUrl( |
|
|
|
fetchEnd(concurrentRecord) |
|
|
|
fetchEnd(concurrentRecord) |
|
|
|
return byteArray |
|
|
|
return byteArray |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fun getByteArray(): ByteArray { |
|
|
|
fun getByteArray(): ByteArray { |
|
|
|
return runBlocking { |
|
|
|
return runBlocking { |
|
|
|