6.7.0 - Alpha2 - http 模块相关方法支持不安全参数 (isInsecure/insecure), 用于忽略证书相关异常 (issue #417)

This commit is contained in:
SuperMonster003
2025-06-19 19:18:29 +08:00
parent 8838532d9f
commit cd3bb8491a
4 changed files with 39 additions and 4 deletions

View File

@@ -1,9 +1,15 @@
package org.autojs.autojs.core.http
import android.annotation.SuppressLint
import android.util.Log
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import java.security.SecureRandom
import java.security.cert.X509Certificate
import java.util.concurrent.TimeUnit
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
/**
* Created by Stardust on Apr 11, 2018.
@@ -12,6 +18,7 @@ import java.util.concurrent.TimeUnit
class MutableOkHttp : OkHttpClient() {
private var mTimeout = DEFAULT_TIMEOUT
private var mIsInsecure = DEFAULT_IS_INSECURE
private var mOkHttpClient: OkHttpClient
private val mInterceptors: MutableList<Interceptor> = ArrayList()
@@ -25,6 +32,13 @@ class MutableOkHttp : OkHttpClient() {
muteClient()
}
var isInsecure: Boolean
get() = mIsInsecure
set(isInsecure) {
mIsInsecure = isInsecure
muteClient()
}
init {
mOkHttpClient = newClient(Builder())
mInterceptors.add(getRetryInterceptor())
@@ -38,6 +52,21 @@ class MutableOkHttp : OkHttpClient() {
.readTimeout(timeout, TimeUnit.MILLISECONDS)
.writeTimeout(timeout, TimeUnit.MILLISECONDS)
.connectTimeout(timeout, TimeUnit.MILLISECONDS)
.also { b ->
if (!isInsecure) return@also
@SuppressLint("CustomX509TrustManager")
val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) = Unit
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) = Unit
override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
})
val sslContext = SSLContext.getInstance("TLS").apply {
init(null, trustAllCerts, SecureRandom())
}
val trustManager = trustAllCerts.first() as X509TrustManager
b.sslSocketFactory(sslContext.socketFactory, trustManager)
b.hostnameVerifier { _, _ -> true }
}
.build()
}
@@ -66,16 +95,18 @@ class MutableOkHttp : OkHttpClient() {
response
}
@Suppress("MayBeConstant")
companion object {
private val TAG = MutableOkHttp::class.java.simpleName
@JvmField
@Suppress("MayBeConstant")
val DEFAULT_TIMEOUT = 30 * 1000L
@JvmField
@Suppress("MayBeConstant")
val DEFAULT_IS_INSECURE = false
@JvmField
val DEFAULT_MAX_RETRIES = 3
}

View File

@@ -24,6 +24,7 @@ import org.autojs.autojs.extension.AnyExtensions.jsBrief
import org.autojs.autojs.extension.ArrayExtensions.toNativeArray
import org.autojs.autojs.extension.FlexibleArray
import org.autojs.autojs.extension.ScriptableExtensions.prop
import org.autojs.autojs.extension.ScriptableObjectExtensions.inquire
import org.autojs.autojs.pio.PFile
import org.autojs.autojs.pio.PFileInterface
import org.autojs.autojs.runtime.ScriptRuntime
@@ -34,6 +35,7 @@ import org.autojs.autojs.runtime.api.augment.continuation.Creator
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
import org.autojs.autojs.util.RhinoUtils
import org.autojs.autojs.util.RhinoUtils.UNDEFINED
import org.autojs.autojs.util.RhinoUtils.coerceBoolean
import org.autojs.autojs.util.RhinoUtils.coerceIntNumber
import org.autojs.autojs.util.RhinoUtils.coerceLongNumber
import org.autojs.autojs.util.RhinoUtils.coerceObject
@@ -128,6 +130,7 @@ class Http(scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime) {
scriptRuntime.http.okhttp.timeout = coerceLongNumber(opt.prop(KEY_TIMEOUT), DEFAULT_TIMEOUT)
scriptRuntime.http.okhttp.maxRetries = coerceIntNumber(opt.prop(KEY_MAX_RETRIES), DEFAULT_MAX_RETRIES)
scriptRuntime.http.okhttp.isInsecure = opt.inquire(listOf("isInsecure", "insecure"), ::coerceBoolean, false)
val newCall = scriptRuntime.http.client().newCall(buildRequestRhino(url, options))