pull/736/head
gedoor 4 years ago
parent 56bbe79097
commit 2721e75ecc
  1. 4
      app/src/main/java/io/legado/app/help/http/AjaxWebView.kt
  2. 2
      app/src/main/java/io/legado/app/help/http/HttpHelper.kt
  3. 106
      app/src/main/java/io/legado/app/help/http/StrResponse.kt
  4. 5
      app/src/main/java/io/legado/app/help/http/parser/StrResponseParser.kt
  5. 2
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt

@ -160,7 +160,7 @@ class AjaxWebView {
if (it.isNotEmpty() && it != "null") { if (it.isNotEmpty() && it != "null") {
val content = StringEscapeUtils.unescapeJson(it) val content = StringEscapeUtils.unescapeJson(it)
.replace("^\"|\"$".toRegex(), "") .replace("^\"|\"$".toRegex(), "")
handler.obtainMessage(MSG_SUCCESS, StrResponse.success(content, url)) handler.obtainMessage(MSG_SUCCESS, StrResponse(url, content))
.sendToTarget() .sendToTarget()
handler.removeCallbacks(this) handler.removeCallbacks(this)
return@evaluateJavascript return@evaluateJavascript
@ -188,7 +188,7 @@ class AjaxWebView {
if (url.matches(it.toRegex())) { if (url.matches(it.toRegex())) {
handler.obtainMessage( handler.obtainMessage(
MSG_SUCCESS, MSG_SUCCESS,
StrResponse.success(url, view.url ?: params.url) StrResponse(view.url ?: params.url, url)
).sendToTarget() ).sendToTarget()
} }
} }

@ -111,7 +111,7 @@ object HttpHelper {
override fun onError(error: Throwable) { override fun onError(error: Throwable) {
if (!block.isCompleted) if (!block.isCompleted)
block.resume(StrResponse.success(error.msg, params.url)) block.resume(StrResponse(params.url, error.msg))
} }
} }
webView.load(params) webView.load(params)

@ -2,17 +2,36 @@ package io.legado.app.help.http
import okhttp3.* import okhttp3.*
import okhttp3.Response.Builder import okhttp3.Response.Builder
import java.util.*
/** /**
* An HTTP response. * An HTTP response.
*/ */
@Suppress("unused", "MemberVisibilityCanBePrivate") @Suppress("unused", "MemberVisibilityCanBePrivate")
class StrResponse private constructor( class StrResponse {
val rawResponse: Response, var rawResponse: Response
val body: String?, var body: String? = null
val errorBody: ResponseBody? var errorBody: ResponseBody? = null
) {
constructor(rawResponse: Response, body: String?) {
this.rawResponse = rawResponse
this.body = body
}
constructor(url: String, body: String?) {
rawResponse = Builder()
.code(200)
.message("OK")
.protocol(Protocol.HTTP_1_1)
.request(Request.Builder().url(url).build())
.build()
this.body = body
}
constructor(rawResponse: Response, errorBody: ResponseBody?) {
this.rawResponse = rawResponse
this.errorBody = errorBody
}
fun raw() = rawResponse fun raw() = rawResponse
fun url(): String { fun url(): String {
@ -44,79 +63,4 @@ class StrResponse private constructor(
return rawResponse.toString() return rawResponse.toString()
} }
companion object {
fun success(code: Int, body: String): StrResponse {
require(!(code < 200 || code >= 300)) { "code < 200 or >= 300: $code" }
return success(
body,
Builder() //
.code(code)
.message("Response.success()")
.protocol(Protocol.HTTP_1_1)
.request(Request.Builder().url("http://localhost/").build())
.build()
)
}
fun success(body: String, headers: Headers): StrResponse {
return success(
body,
Builder() //
.code(200)
.message("OK")
.protocol(Protocol.HTTP_1_1)
.headers(headers)
.request(Request.Builder().url("http://localhost/").build())
.build()
)
}
fun success(body: String, url: String): StrResponse {
return success(
body,
Builder() //
.code(200)
.message("OK")
.protocol(Protocol.HTTP_1_1)
.request(Request.Builder().url(url).build())
.build()
)
}
@JvmOverloads
fun success(
body: String?, rawResponse: Response =
Builder() //
.code(200)
.message("OK")
.protocol(Protocol.HTTP_1_1)
.request(Request.Builder().url("http://localhost/").build())
.build()
): StrResponse {
Objects.requireNonNull(rawResponse, "rawResponse == null")
require(rawResponse.isSuccessful) { "rawResponse must be successful response" }
return StrResponse(rawResponse, body, null)
}
fun error(code: Int, body: ResponseBody?): StrResponse {
Objects.requireNonNull(body, "body == null")
require(code >= 400) { "code < 400: $code" }
return error(
body,
Builder() //
.code(code)
.message("Response.error()")
.protocol(Protocol.HTTP_1_1)
.request(Request.Builder().url("http://localhost/").build())
.build()
)
}
fun error(body: ResponseBody?, rawResponse: Response): StrResponse {
Objects.requireNonNull(body, "body == null")
Objects.requireNonNull(rawResponse, "rawResponse == null")
require(!rawResponse.isSuccessful) { "rawResponse should not be successful response" }
return StrResponse(rawResponse, null, body)
}
}
} }

@ -9,11 +9,12 @@ import rxhttp.wrapper.exception.HttpStatusCodeException
import java.nio.charset.Charset import java.nio.charset.Charset
@Parser(name = "StrResponse") @Parser(name = "StrResponse")
class StrResponseParser(val encode: String? = null) : rxhttp.wrapper.parse.Parser<StrResponse> { class StrResponseParser(private val encode: String? = null) :
rxhttp.wrapper.parse.Parser<StrResponse> {
override fun onParse(response: Response): StrResponse { override fun onParse(response: Response): StrResponse {
val body = getString(response) val body = getString(response)
return StrResponse.success(body, response) return StrResponse(response, body)
} }
private fun getString(response: Response): String { private fun getString(response: Response): String {

@ -280,7 +280,7 @@ class AnalyzeUrl(
sourceRegex: String? = null, sourceRegex: String? = null,
): StrResponse { ): StrResponse {
if (type != null) { if (type != null) {
return StrResponse.success(StringUtils.byteToHexString(getByteArray(tag)), url) return StrResponse(url, StringUtils.byteToHexString(getByteArray(tag)))
} }
setCookie(tag) setCookie(tag)
if (useWebView) { if (useWebView) {

Loading…
Cancel
Save