6.7.0 - Alpha2 - http 模块相关方法支持不安全参数 (isInsecure/insecure), 用于忽略证书相关异常 (issue #417)
This commit is contained in:
@@ -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 构建脚本支持根据平台类型及版本自动选择合适的构建工具版本 (程度有限)"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user