diff --git a/src/main/java/com/serliunx/ddns/constant/ConfigurationKeys.java b/src/main/java/com/serliunx/ddns/constant/ConfigurationKeys.java index 72ab540..e642762 100644 --- a/src/main/java/com/serliunx/ddns/constant/ConfigurationKeys.java +++ b/src/main/java/com/serliunx/ddns/constant/ConfigurationKeys.java @@ -40,4 +40,34 @@ public final class ConfigurationKeys { * ip地址提供器类型 */ 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"; } diff --git a/src/main/java/com/serliunx/ddns/support/okhttp/HttpClient.java b/src/main/java/com/serliunx/ddns/support/okhttp/HttpClient.java index 7f3f99f..28d8005 100644 --- a/src/main/java/com/serliunx/ddns/support/okhttp/HttpClient.java +++ b/src/main/java/com/serliunx/ddns/support/okhttp/HttpClient.java @@ -2,13 +2,12 @@ package com.serliunx.ddns.support.okhttp; import com.serliunx.ddns.config.Configuration; import com.serliunx.ddns.constant.ConfigurationKeys; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.ResponseBody; +import okhttp3.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.net.InetSocketAddress; +import java.net.Proxy; import java.util.concurrent.TimeUnit; /** @@ -69,10 +68,35 @@ public final class HttpClient { * @param 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() - .connectTimeout(overtime, TimeUnit.SECONDS) + Integer overtime = configuration.getInteger(ConfigurationKeys.KEY_HTTP_OVERTIME, DEFAULT_OVERTIME); + 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) .writeTimeout(overtime, TimeUnit.SECONDS) .build(); diff --git a/src/main/resources/settings.properties b/src/main/resources/settings.properties index 9b00ff4..571263e 100644 --- a/src/main/resources/settings.properties +++ b/src/main/resources/settings.properties @@ -3,4 +3,10 @@ system.pool.core.size=4 system.task.refresh.interval.ip=300 system.ip.provider.type=IP_API 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