mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 01:17:41 +08:00
修复:发送通道Telegram
启用Socks5支持用户密码鉴权 #172
This commit is contained in:
parent
27e3340c32
commit
42e2f03652
@ -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<String, Any> = mutableMapOf()
|
||||
bodyMap["chat_id"] = setting.chatId
|
||||
@ -89,42 +56,69 @@ 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)
|
||||
XHttp.post(requestUrl).upJson(requestMsg)
|
||||
}
|
||||
|
||||
//设置代理
|
||||
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()) }))
|
||||
|
||||
//代理的鉴权账号密码
|
||||
if (setting.proxyAuthenticator == true
|
||||
&& (!TextUtils.isEmpty(setting.proxyUsername) || !TextUtils.isEmpty(setting.proxyPassword))
|
||||
) {
|
||||
Log.i(TAG, "proxyUsername = ${setting.proxyUsername}, proxyPassword = ${setting.proxyPassword}")
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
client.newCall(request).enqueue(object : Callback {
|
||||
|
||||
override fun onFailure(call: Call, e: IOException) {
|
||||
e.printStackTrace()
|
||||
Looper.prepare()
|
||||
SendUtils.updateLogs(logId, 0, e.message.toString())
|
||||
//XToastUtils.error("发送失败:" + e.message)
|
||||
Looper.loop()
|
||||
}
|
||||
|
||||
@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()
|
||||
} else {
|
||||
Looper.prepare()
|
||||
SendUtils.updateLogs(logId, 0, responseStr.toString())
|
||||
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<String>() {
|
||||
|
||||
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)
|
||||
Looper.loop()
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user