From 42e2f036528ea787dc2f0456d3cd06d942f60bc2 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Fri, 24 Jun 2022 23:01:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=80=9A=E9=81=93`Telegram`=E5=90=AF=E7=94=A8Socks5=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=94=A8=E6=88=B7=E5=AF=86=E7=A0=81=E9=89=B4=E6=9D=83?= =?UTF-8?q?=20#172?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../forwarder/utils/sender/TelegramUtils.kt | 150 +++++++++--------- versions.gradle | 6 +- 2 files changed, 75 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt index 07b3f816..885733eb 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/TelegramUtils.kt @@ -1,6 +1,5 @@ package com.idormy.sms.forwarder.utils.sender -import android.os.Looper import android.text.TextUtils import android.util.Log import com.google.gson.Gson @@ -10,15 +9,18 @@ import com.idormy.sms.forwarder.entity.result.TelegramResult import com.idormy.sms.forwarder.entity.setting.TelegramSetting import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SettingUtils -import okhttp3.* -import java.io.IOException -import java.net.InetSocketAddress -import java.net.Proxy -import java.net.URLEncoder -import java.util.concurrent.TimeUnit +import com.xuexiang.xhttp2.XHttp +import com.xuexiang.xhttp2.cache.model.CacheMode +import com.xuexiang.xhttp2.callback.SimpleCallBack +import com.xuexiang.xhttp2.exception.ApiException +import okhttp3.Credentials +import okhttp3.Response +import okhttp3.Route +import java.net.* + @Suppress("PrivatePropertyName", "UNUSED_PARAMETER", "unused") -class TelegramUtils { +class TelegramUtils private constructor() { companion object { private val TAG: String = TelegramUtils::class.java.simpleName @@ -35,52 +37,17 @@ class TelegramUtils { msgInfo.getContentForSend(SettingUtils.smsTemplate.toString()) } - val requestUrl = if (setting.apiToken.startsWith("http")) { + var requestUrl = if (setting.apiToken.startsWith("http")) { setting.apiToken } else { "https://api.telegram.org/bot" + setting.apiToken + "/sendMessage" } Log.i(TAG, "requestUrl:$requestUrl") - val clientBuilder = OkHttpClient.Builder() - //设置代理 - if ((setting.proxyType == Proxy.Type.HTTP || setting.proxyType == Proxy.Type.SOCKS) && !TextUtils.isEmpty(setting.proxyHost) && !TextUtils.isEmpty(setting.proxyPort)) { - //代理服务器的IP和端口号 - clientBuilder.proxy(Proxy(setting.proxyType, setting.proxyPort?.let { InetSocketAddress(setting.proxyHost, it.toInt()) })) - - //代理的鉴权账号密码 - if (setting.proxyAuthenticator == true && (!TextUtils.isEmpty(setting.proxyUsername) || !TextUtils.isEmpty(setting.proxyPassword))) { - clientBuilder.proxyAuthenticator { _: Route?, response: Response -> - //设置代理服务器账号密码 - val credential = Credentials.basic(setting.proxyUsername.toString(), setting.proxyPassword.toString()) - response.request().newBuilder() - .header("Proxy-Authorization", credential) - .build() - } - } - } - - //设置重试拦截器 - val retryTimes: Int = SettingUtils.requestRetryTimes - if (retryTimes > 0) { - val delayTime: Long = SettingUtils.requestDelayTime.toLong() - val retryInterceptor: RetryInterceptor = RetryInterceptor.Builder().executionCount(retryTimes).retryInterval(delayTime).logId(0).build() - clientBuilder.addInterceptor(retryInterceptor) - } - - - //设置读取超时时间 - val client = clientBuilder - .readTimeout(SettingUtils.requestTimeout.toLong(), TimeUnit.SECONDS) - .writeTimeout(SettingUtils.requestTimeout.toLong(), TimeUnit.SECONDS) - .connectTimeout(SettingUtils.requestTimeout.toLong(), TimeUnit.SECONDS) - .build() - - val request: Request - if (setting.method != null && setting.method == "GET") { - request = Request.Builder() - .url(requestUrl + "?chat_id=" + setting.chatId + "&text=" + URLEncoder.encode(content, "UTF-8")) - .build() + val request = if (setting.method != null && setting.method == "GET") { + requestUrl += "?chat_id=" + setting.chatId + "&text=" + URLEncoder.encode(content, "UTF-8") + Log.i(TAG, "requestUrl:$requestUrl") + XHttp.get(requestUrl) } else { val bodyMap: MutableMap = mutableMapOf() bodyMap["chat_id"] = setting.chatId @@ -89,43 +56,70 @@ class TelegramUtils { bodyMap["disable_web_page_preview"] = "true" val requestMsg: String = Gson().toJson(bodyMap) Log.i(TAG, "requestMsg:$requestMsg") - val requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg) - request = Request.Builder() - .url(requestUrl) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build() + XHttp.post(requestUrl).upJson(requestMsg) } - client.newCall(request).enqueue(object : Callback { + //设置代理 + if ((setting.proxyType == Proxy.Type.HTTP || setting.proxyType == Proxy.Type.SOCKS) + && !TextUtils.isEmpty(setting.proxyHost) && !TextUtils.isEmpty(setting.proxyPort) + ) { + //代理服务器的IP和端口号 + request.okproxy(Proxy(setting.proxyType, setting.proxyPort?.let { InetSocketAddress(setting.proxyHost, it.toInt()) })) - override fun onFailure(call: Call, e: IOException) { - e.printStackTrace() - Looper.prepare() - SendUtils.updateLogs(logId, 0, e.message.toString()) - //XToastUtils.error("发送失败:" + e.message) - Looper.loop() - } + //代理的鉴权账号密码 + if (setting.proxyAuthenticator == true + && (!TextUtils.isEmpty(setting.proxyUsername) || !TextUtils.isEmpty(setting.proxyPassword)) + ) { + Log.i(TAG, "proxyUsername = ${setting.proxyUsername}, proxyPassword = ${setting.proxyPassword}") - @Throws(IOException::class) - override fun onResponse(call: Call, response: Response) { - val responseStr = response.body()?.string() - Log.d(TAG, "Response:" + response.code() + "," + responseStr) - - val resp = Gson().fromJson(responseStr, TelegramResult::class.java) - if (resp.ok == true) { - Looper.prepare() - SendUtils.updateLogs(logId, 2, responseStr.toString()) - //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) - Looper.loop() + if (setting.proxyType == Proxy.Type.HTTP) { + request.okproxyAuthenticator { _: Route?, response: Response -> + //设置代理服务器账号密码 + val credential = Credentials.basic(setting.proxyUsername.toString(), setting.proxyPassword.toString()) + response.request().newBuilder() + .header("Proxy-Authorization", credential) + .build() + } } else { - Looper.prepare() - SendUtils.updateLogs(logId, 0, responseStr.toString()) - //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) - Looper.loop() + Authenticator.setDefault(object : Authenticator() { + override fun getPasswordAuthentication(): PasswordAuthentication { + return PasswordAuthentication(setting.proxyUsername.toString(), setting.proxyPassword?.toCharArray()) + } + }) } } - }) + } + + request.keepJson(true) + .ignoreHttpsCert() + .timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s + .cacheMode(CacheMode.NO_CACHE) + .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 + .retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 + .retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 + .timeStamp(true) + .execute(object : SimpleCallBack() { + + override fun onError(e: ApiException) { + SendUtils.updateLogs(logId, 0, e.displayMessage) + Log.e(TAG, e.detailMessage) + //XToastUtils.error(e.displayMessage) + } + + override fun onSuccess(response: String) { + Log.i(TAG, response) + + val resp = Gson().fromJson(response, TelegramResult::class.java) + if (resp.ok == true) { + SendUtils.updateLogs(logId, 2, response) + //XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + } else { + SendUtils.updateLogs(logId, 0, response) + //XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + } + } + + }) } diff --git a/versions.gradle b/versions.gradle index 9d3cb25d..67be5865 100644 --- a/versions.gradle +++ b/versions.gradle @@ -31,7 +31,7 @@ versions.rxbinding = "2.2.0" versions.butterknife = "10.2.3" versions.runner = "1.4.0" versions.gson = "2.9.0" -versions.okhttp3 = "3.12.13" //不可升级,支持 API 19 +versions.okhttp3 = "3.14.9" //不可升级,支持 API 19 versions.leakcanary = "2.8.1" versions.lifecycle = "2.2.0" versions.kotlin = '1.6.21' @@ -42,7 +42,7 @@ versions.xui = "1.2.0" //1.1.9 versions.xupdate = "2.1.1" versions.xaop = "1.1.0" versions.xutil = "2.0.0" -versions.xhttp2 = "2.0.4" +versions.xhttp2 = "2.0.6"//2.0.4 versions.xpage = "3.3.0" versions.xrouter = "1.0.1" @@ -138,7 +138,7 @@ xlibrary.xaop_runtime = "com.github.xuexiangjys.XAOP:xaop-runtime:$versions.xaop xlibrary.xaop_plugin = "com.github.xuexiangjys.XAOP:xaop-plugin:$versions.xaop" xlibrary.xutil_core = "com.github.xuexiangjys.XUtil:xutil-core:$versions.xutil" xlibrary.xutil_sub = "com.github.xuexiangjys.XUtil:xutil-sub:$versions.xutil" -xlibrary.xhttp2 = "com.github.xuexiangjys:XHttp2:$versions.xhttp2" +xlibrary.xhttp2 = "com.github.pppscn:XHttp2:$versions.xhttp2" //com.github.xuexiangjys:XHttp2 xlibrary.xpage_lib = "com.github.xuexiangjys.XPage:xpage-lib:$versions.xpage" xlibrary.xpage_compiler = "com.github.xuexiangjys.XPage:xpage-compiler:$versions.xpage" xlibrary.xrouter_runtime = "com.github.xuexiangjys.XRouter:xrouter-runtime:$versions.xrouter"