48 lines
1.6 KiB
Dart
48 lines
1.6 KiB
Dart
import 'dart:io';
|
|
import 'package:dio/dio.dart';
|
|
import 'package:dio/io.dart';
|
|
import 'package:kaer_with_panels/app/services/singbox_imp/kr_sing_box_imp.dart';
|
|
import 'package:kaer_with_panels/app/utils/kr_log_util.dart';
|
|
|
|
class KRHttpAdapterUtil {
|
|
/// 创建标准配置的 HttpClientAdapter
|
|
///
|
|
/// [useSingBoxProxy] 是否集成 sing-box 代理规则,默认 true
|
|
/// [forceDirect] 是否强制直连(不使用任何代理),默认 false
|
|
static HttpClientAdapter createAdapter({
|
|
bool useSingBoxProxy = true,
|
|
bool forceDirect = false,
|
|
Duration timeout = const Duration(seconds: 10),
|
|
}) {
|
|
return IOHttpClientAdapter(
|
|
createHttpClient: () {
|
|
final client = HttpClient();
|
|
client.connectionTimeout = timeout;
|
|
|
|
// ✅ 统一修复:允许所有 SSL 证书
|
|
client.badCertificateCallback = (cert, host, port) => true;
|
|
|
|
if (forceDirect) {
|
|
client.findProxy = (url) {
|
|
KRLogUtil.kr_i('🔍 请求使用直连: $url', tag: 'KRHttpAdapterUtil');
|
|
return 'DIRECT';
|
|
};
|
|
} else if (useSingBoxProxy) {
|
|
client.findProxy = (url) {
|
|
try {
|
|
final proxyConfig = KRSingBoxImp.instance.kr_buildProxyRule();
|
|
KRLogUtil.kr_i('🔍 请求使用代理: $proxyConfig, url: $url', tag: 'KRHttpAdapterUtil');
|
|
return proxyConfig;
|
|
} catch (e) {
|
|
KRLogUtil.kr_w('⚠️ 获取代理配置异常,回退到 DIRECT: $e', tag: 'KRHttpAdapterUtil');
|
|
return 'DIRECT';
|
|
}
|
|
};
|
|
}
|
|
|
|
return client;
|
|
},
|
|
);
|
|
}
|
|
}
|