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

@@ -14,6 +14,7 @@
"版本历史页面部分系统因字体差别导致统计数据显示不完整的问题" "版本历史页面部分系统因字体差别导致统计数据显示不完整的问题"
], ],
"improvement": [ "improvement": [
"http 模块相关方法支持不安全选项参数 (isInsecure/insecure), 用于忽略证书相关异常 _[`issue #417`](http://issues.autojs6.com/417)_",
"android.graphics.Paint#setColor 支持正常解析 ColorInt/ColorHex/ColorName 等颜色参数", "android.graphics.Paint#setColor 支持正常解析 ColorInt/ColorHex/ColorName 等颜色参数",
"内置模块相关方法实参类型的异常消息增加类型摘要信息" "内置模块相关方法实参类型的异常消息增加类型摘要信息"
], ],
@@ -676,7 +677,7 @@
"控制台浮动窗口支持拖动标题区域移动窗口位置", "控制台浮动窗口支持拖动标题区域移动窗口位置",
"控制台浮动窗口支持脚本结束后自动延迟关闭", "控制台浮动窗口支持脚本结束后自动延迟关闭",
"控制台浮动窗口及其 Activity 活动窗口支持双指缩放调整字体大小", "控制台浮动窗口及其 Activity 活动窗口支持双指缩放调整字体大小",
"http 模块相关方法支持超时参数 (timeout)", "http 模块相关方法支持超时选项参数 (timeout)",
"Gradle 构建脚本支持 JDK 版本主动降级 (fallback)", "Gradle 构建脚本支持 JDK 版本主动降级 (fallback)",
"Gradle 构建脚本支持根据平台类型及版本自动选择合适的构建工具版本 (程度有限)" "Gradle 构建脚本支持根据平台类型及版本自动选择合适的构建工具版本 (程度有限)"
], ],

View File

@@ -1,9 +1,15 @@
package org.autojs.autojs.core.http package org.autojs.autojs.core.http
import android.annotation.SuppressLint
import android.util.Log import android.util.Log
import okhttp3.Interceptor import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import java.security.SecureRandom
import java.security.cert.X509Certificate
import java.util.concurrent.TimeUnit 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. * Created by Stardust on Apr 11, 2018.
@@ -12,6 +18,7 @@ import java.util.concurrent.TimeUnit
class MutableOkHttp : OkHttpClient() { class MutableOkHttp : OkHttpClient() {
private var mTimeout = DEFAULT_TIMEOUT private var mTimeout = DEFAULT_TIMEOUT
private var mIsInsecure = DEFAULT_IS_INSECURE
private var mOkHttpClient: OkHttpClient private var mOkHttpClient: OkHttpClient
private val mInterceptors: MutableList<Interceptor> = ArrayList() private val mInterceptors: MutableList<Interceptor> = ArrayList()
@@ -25,6 +32,13 @@ class MutableOkHttp : OkHttpClient() {
muteClient() muteClient()
} }
var isInsecure: Boolean
get() = mIsInsecure
set(isInsecure) {
mIsInsecure = isInsecure
muteClient()
}
init { init {
mOkHttpClient = newClient(Builder()) mOkHttpClient = newClient(Builder())
mInterceptors.add(getRetryInterceptor()) mInterceptors.add(getRetryInterceptor())
@@ -38,6 +52,21 @@ class MutableOkHttp : OkHttpClient() {
.readTimeout(timeout, TimeUnit.MILLISECONDS) .readTimeout(timeout, TimeUnit.MILLISECONDS)
.writeTimeout(timeout, TimeUnit.MILLISECONDS) .writeTimeout(timeout, TimeUnit.MILLISECONDS)
.connectTimeout(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() .build()
} }
@@ -66,16 +95,18 @@ class MutableOkHttp : OkHttpClient() {
response response
} }
@Suppress("MayBeConstant")
companion object { companion object {
private val TAG = MutableOkHttp::class.java.simpleName private val TAG = MutableOkHttp::class.java.simpleName
@JvmField @JvmField
@Suppress("MayBeConstant")
val DEFAULT_TIMEOUT = 30 * 1000L val DEFAULT_TIMEOUT = 30 * 1000L
@JvmField @JvmField
@Suppress("MayBeConstant") val DEFAULT_IS_INSECURE = false
@JvmField
val DEFAULT_MAX_RETRIES = 3 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.ArrayExtensions.toNativeArray
import org.autojs.autojs.extension.FlexibleArray import org.autojs.autojs.extension.FlexibleArray
import org.autojs.autojs.extension.ScriptableExtensions.prop 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.PFile
import org.autojs.autojs.pio.PFileInterface import org.autojs.autojs.pio.PFileInterface
import org.autojs.autojs.runtime.ScriptRuntime 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.runtime.exception.WrappedIllegalArgumentException
import org.autojs.autojs.util.RhinoUtils import org.autojs.autojs.util.RhinoUtils
import org.autojs.autojs.util.RhinoUtils.UNDEFINED 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.coerceIntNumber
import org.autojs.autojs.util.RhinoUtils.coerceLongNumber import org.autojs.autojs.util.RhinoUtils.coerceLongNumber
import org.autojs.autojs.util.RhinoUtils.coerceObject 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.timeout = coerceLongNumber(opt.prop(KEY_TIMEOUT), DEFAULT_TIMEOUT)
scriptRuntime.http.okhttp.maxRetries = coerceIntNumber(opt.prop(KEY_MAX_RETRIES), DEFAULT_MAX_RETRIES) 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)) val newCall = scriptRuntime.http.client().newCall(buildRequestRhino(url, options))

View File

@@ -20,5 +20,5 @@ RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
TARGET_SDK_VERSION=35 TARGET_SDK_VERSION=35
TARGET_SDK_VERSION_INRT=29 TARGET_SDK_VERSION_INRT=29
VERSION_BUILD=3293 VERSION_BUILD=3293
VERSION_NAME=6.7.0 Alpha VERSION_NAME=6.7.0 Alpha2
VSCODE_EXT_REQUIRED_VERSION=1.0.8 VSCODE_EXT_REQUIRED_VERSION=1.0.8