feat: 新增全局代理配置.

This commit is contained in:
2025-01-07 10:18:28 +08:00
parent 05b637b9f1
commit b3ca9c2647
3 changed files with 67 additions and 7 deletions

View File

@@ -40,4 +40,34 @@ public final class ConfigurationKeys {
* ip地址提供器类型 * ip地址提供器类型
*/ */
public static final String KEY_IP_PROVIDER_TYPE = "system.ip.provider.type"; public static final String KEY_IP_PROVIDER_TYPE = "system.ip.provider.type";
/**
* 是否启用HTTP代理
*/
public static final String KEY_HTTP_PROXY_ENABLE = "system.http.proxy.enable";
/**
* HTTP代理主机地址
*/
public static final String KEY_HTTP_PROXY_HOST = "system.http.proxy.host";
/**
* HTTP代理端口
*/
public static final String KEY_HTTP_PROXY_PORT = "system.http.proxy.port";
/**
* HTTP代理是否需要认证
*/
public static final String KEY_HTTP_PROXY_AUTH = "system.http.proxy.auth";
/**
* HTTP代理认证用户名
*/
public static final String KEY_HTTP_PROXY_USERNAME = "system.http.proxy.username";
/**
* HTTP代理认证密码
*/
public static final String KEY_HTTP_PROXY_PASSWORD = "system.http.proxy.password";
} }

View File

@@ -2,13 +2,12 @@ package com.serliunx.ddns.support.okhttp;
import com.serliunx.ddns.config.Configuration; import com.serliunx.ddns.config.Configuration;
import com.serliunx.ddns.constant.ConfigurationKeys; import com.serliunx.ddns.constant.ConfigurationKeys;
import okhttp3.OkHttpClient; import okhttp3.*;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@@ -69,10 +68,35 @@ public final class HttpClient {
* @param configuration 配置信息 * @param configuration 配置信息
*/ */
public static void init(Configuration configuration) { public static void init(Configuration configuration) {
Integer overtime = configuration.getInteger(ConfigurationKeys.KEY_HTTP_OVERTIME, DEFAULT_OVERTIME); OkHttpClient.Builder builder = new OkHttpClient.Builder();
CLIENT = new OkHttpClient.Builder() Integer overtime = configuration.getInteger(ConfigurationKeys.KEY_HTTP_OVERTIME, DEFAULT_OVERTIME);
.connectTimeout(overtime, TimeUnit.SECONDS) boolean proxyEnable = configuration.getBoolean(ConfigurationKeys.KEY_HTTP_PROXY_ENABLE, false);
boolean authEnable = configuration.getBoolean(ConfigurationKeys.KEY_HTTP_PROXY_AUTH, false);
String host = configuration.getString(ConfigurationKeys.KEY_HTTP_PROXY_HOST);
Integer port = configuration.getInteger(ConfigurationKeys.KEY_HTTP_PROXY_PORT);
String username = configuration.getString(ConfigurationKeys.KEY_HTTP_PROXY_USERNAME);
String password = configuration.getString(ConfigurationKeys.KEY_HTTP_PROXY_PASSWORD);
// 配置代理
if (proxyEnable) {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));
builder.proxy(proxy);
// 是否需要认证
if (authEnable) {
Authenticator authenticator = (route, response) -> {
String credential = Credentials.basic(username, password);
return response.request().newBuilder()
.header("Proxy-Authorization", credential)
.build();
};
builder.proxyAuthenticator(authenticator);
}
}
CLIENT = builder.connectTimeout(overtime, TimeUnit.SECONDS)
.readTimeout(overtime, TimeUnit.SECONDS) .readTimeout(overtime, TimeUnit.SECONDS)
.writeTimeout(overtime, TimeUnit.SECONDS) .writeTimeout(overtime, TimeUnit.SECONDS)
.build(); .build();

View File

@@ -3,4 +3,10 @@ system.pool.core.size=4
system.task.refresh.interval.ip=300 system.task.refresh.interval.ip=300
system.ip.provider.type=IP_API system.ip.provider.type=IP_API
system.http.overtime=3 system.http.overtime=3
system.http.proxy.enable=true
system.http.proxy.host=127.0.0.1
system.http.proxy.port=7897
system.http.proxy.auth=false
system.http.proxy.username=username
system.http.proxy.password=password
instance.aliyun.endpoint.url=alidns.cn-hangzhou.aliyuncs.com instance.aliyun.endpoint.url=alidns.cn-hangzhou.aliyuncs.com