From cbb9c9e57fa8c8c4ce634cd7ad86c618a1aec356 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Sun, 22 May 2022 02:17:02 +0700 Subject: [PATCH 01/15] Added proxy settings for --- .../api/client/impl/BinanceApiServiceGenerator.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index c31fe0e22..3645a47eb 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -1,5 +1,7 @@ package com.binance.api.client.impl; +import java.net.InetSocketAddress; +import java.net.Proxy; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.StringUtils; @@ -23,11 +25,19 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final OkHttpClient sharedClient; private final Converter.Factory converterFactory = JacksonConverterFactory.create(); + private final String hostname = "159.65.4.199"; + private final int port = 3128; + private final Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(hostname, port)); + { Dispatcher dispatcher = new Dispatcher(); dispatcher.setMaxRequestsPerHost(500); dispatcher.setMaxRequests(500); - sharedClient = new OkHttpClient.Builder().dispatcher(dispatcher).pingInterval(20, TimeUnit.SECONDS).build(); + sharedClient = new OkHttpClient.Builder() + .dispatcher(dispatcher) + .proxy(proxy) + .pingInterval(20, TimeUnit.SECONDS) + .build(); } @Override From e6844e1930eef2b1e17c9f0ac0d63d61dc658647 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Sun, 22 May 2022 02:42:55 +0700 Subject: [PATCH 02/15] Added proxy settings for --- .../impl/BinanceApiServiceGenerator.java | 84 +++++++++++-------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index 3645a47eb..a4a538495 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -1,68 +1,78 @@ package com.binance.api.client.impl; +import java.io.IOException; +import java.net.Authenticator; import java.net.InetSocketAddress; +import java.net.PasswordAuthentication; import java.net.Proxy; import java.util.concurrent.TimeUnit; +import okhttp3.*; import org.apache.commons.lang3.StringUtils; import com.binance.api.client.BinanceApiWebSocketClient; import com.binance.api.client.config.BinanceApiConfig; import com.binance.api.client.security.AuthenticationInterceptor; -import okhttp3.Dispatcher; -import okhttp3.OkHttpClient; import retrofit2.Converter; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; +import javax.annotation.Nullable; + /** * Generates a Binance API implementation based on @see * {@link BinanceApiService}. */ public class BinanceApiServiceGenerator implements ApiGenerator { - private final OkHttpClient sharedClient; - private final Converter.Factory converterFactory = JacksonConverterFactory.create(); + private final OkHttpClient sharedClient; + private final Converter.Factory converterFactory = JacksonConverterFactory.create(); - private final String hostname = "159.65.4.199"; - private final int port = 3128; - private final Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(hostname, port)); + private final String hostname = "159.65.4.199"; + private final int port = 3128; + private final Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(hostname, port)); - { - Dispatcher dispatcher = new Dispatcher(); - dispatcher.setMaxRequestsPerHost(500); - dispatcher.setMaxRequests(500); - sharedClient = new OkHttpClient.Builder() - .dispatcher(dispatcher) - .proxy(proxy) - .pingInterval(20, TimeUnit.SECONDS) - .build(); - } + { + Dispatcher dispatcher = new Dispatcher(); + dispatcher.setMaxRequestsPerHost(500); + dispatcher.setMaxRequests(500); + sharedClient = new OkHttpClient.Builder() + .dispatcher(dispatcher) + .proxy(proxy) + .proxyAuthenticator((route, response) -> { + String credential = Credentials.basic("vextabit", "vgm2022"); + return response.request().newBuilder() + .header("Proxy-Authorization", credential) + .build(); + }) + .pingInterval(20, TimeUnit.SECONDS) + .build(); + } - @Override - public S createService(Class serviceClass, String apiKey, String secret) { - Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl(BinanceApiConfig.getApiBaseUrl()) - .addConverterFactory(converterFactory); + @Override + public S createService(Class serviceClass, String apiKey, String secret) { + Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl(BinanceApiConfig.getApiBaseUrl()) + .addConverterFactory(converterFactory); - if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { - retrofitBuilder.client(sharedClient); - } else { - // `adaptedClient` will use its own interceptor, but share thread pool etc with - // the 'parent' client - AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); - OkHttpClient adaptedClient = sharedClient.newBuilder().addInterceptor(interceptor).build(); - retrofitBuilder.client(adaptedClient); - } + if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { + retrofitBuilder.client(sharedClient); + } else { + // `adaptedClient` will use its own interceptor, but share thread pool etc with + // the 'parent' client + AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); + OkHttpClient adaptedClient = sharedClient.newBuilder().addInterceptor(interceptor).build(); + retrofitBuilder.client(adaptedClient); + } - Retrofit retrofit = retrofitBuilder.build(); - return retrofit.create(serviceClass); - } + Retrofit retrofit = retrofitBuilder.build(); + return retrofit.create(serviceClass); + } - @Override - public BinanceApiWebSocketClient createSocket() { - return new BinanceApiWebSocketClientImpl(sharedClient); + @Override + public BinanceApiWebSocketClient createSocket() { + return new BinanceApiWebSocketClientImpl(sharedClient); - } + } } From 28c5d2d95484efc3741092152369c49b29ca486b Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Sun, 22 May 2022 02:49:42 +0700 Subject: [PATCH 03/15] Added proxy settings for --- .../com/binance/api/client/impl/BinanceApiServiceGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index a4a538495..5f370364c 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -31,7 +31,7 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final String hostname = "159.65.4.199"; private final int port = 3128; - private final Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(hostname, port)); + private final Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, port)); { Dispatcher dispatcher = new Dispatcher(); From fac589b34a78ba362091edc52268925dc044d93e Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Sun, 22 May 2022 03:14:16 +0700 Subject: [PATCH 04/15] Added proxy settings for --- .../java/com/binance/api/client/impl/ApiServiceGenerator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/binance/api/client/impl/ApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/ApiServiceGenerator.java index 3c6636452..595f93ac5 100644 --- a/src/main/java/com/binance/api/client/impl/ApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/ApiServiceGenerator.java @@ -18,11 +18,14 @@ public class ApiServiceGenerator { static { try { + generator = (ApiGenerator) Class.forName("com.binance.api.client.impl.BinanceApiServiceGenerator").newInstance(); + /* if (Boolean.getBoolean("binance.api.use.netty")) { generator = (ApiGenerator) Class.forName("com.binance.api.client.impl.NettyBinanceApiServiceGenerator").newInstance(); } else { generator = (ApiGenerator) Class.forName("com.binance.api.client.impl.BinanceApiServiceGenerator").newInstance(); } + */ } catch (Exception e) { throw new RuntimeException(e); } From c82b3fc3ce4797cd61b4602b58aeb20bc1d2f307 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Wed, 25 May 2022 05:26:37 +0700 Subject: [PATCH 05/15] Updating Proxy Configurations --- .../api/client/impl/ApiServiceGenerator.java | 4 +++- .../impl/BinanceApiServiceGenerator.java | 23 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/ApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/ApiServiceGenerator.java index 595f93ac5..d76812e7b 100644 --- a/src/main/java/com/binance/api/client/impl/ApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/ApiServiceGenerator.java @@ -14,7 +14,7 @@ public class ApiServiceGenerator { - private static ApiGenerator generator; + private static final ApiGenerator generator; static { try { @@ -60,6 +60,8 @@ public static T executeSync(Call call) { * Extracts and converts the response error body into an object. */ public static BinanceApiError getBinanceApiError(Response response) throws IOException, BinanceApiException { + assert errorBodyConverter != null; + assert response.errorBody() != null; return errorBodyConverter.convert(response.errorBody()); } diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index 5f370364c..dd026baa9 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -1,12 +1,13 @@ package com.binance.api.client.impl; import java.io.IOException; +import java.net.*; import java.net.Authenticator; -import java.net.InetSocketAddress; -import java.net.PasswordAuthentication; -import java.net.Proxy; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.TimeUnit; +import com.sun.net.httpserver.HttpsConfigurator; import okhttp3.*; import org.apache.commons.lang3.StringUtils; @@ -33,12 +34,28 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final int port = 3128; private final Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, port)); + private final ProxySelector proxySelector = new ProxySelector() { + + @Override + public List select(URI uri) { + List list = new ArrayList<>(); + list.add(proxy); + return list; + } + + @Override + public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { + + } + }; + { Dispatcher dispatcher = new Dispatcher(); dispatcher.setMaxRequestsPerHost(500); dispatcher.setMaxRequests(500); sharedClient = new OkHttpClient.Builder() .dispatcher(dispatcher) + .proxySelector(proxySelector) .proxy(proxy) .proxyAuthenticator((route, response) -> { String credential = Credentials.basic("vextabit", "vgm2022"); From 42fbf505e0cb6162a8dabeb2f3f134e14f2b7bb7 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Wed, 25 May 2022 08:09:37 +0700 Subject: [PATCH 06/15] Updating Proxy Configurations --- .../client/impl/BinanceApiServiceGenerator.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index dd026baa9..8da045918 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -55,6 +55,8 @@ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { dispatcher.setMaxRequests(500); sharedClient = new OkHttpClient.Builder() .dispatcher(dispatcher) + .followRedirects(false) + .followSslRedirects(false) .proxySelector(proxySelector) .proxy(proxy) .proxyAuthenticator((route, response) -> { @@ -78,7 +80,18 @@ public S createService(Class serviceClass, String apiKey, String secret) // `adaptedClient` will use its own interceptor, but share thread pool etc with // the 'parent' client AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); - OkHttpClient adaptedClient = sharedClient.newBuilder().addInterceptor(interceptor).build(); + OkHttpClient adaptedClient = sharedClient.newBuilder() + .addInterceptor(interceptor) + .followRedirects(false) + .followSslRedirects(false) + .proxySelector(proxySelector) + .proxy(proxy) + .proxyAuthenticator((route, response) -> { + String credential = Credentials.basic("vextabit", "vgm2022"); + return response.request().newBuilder() + .header("Proxy-Authorization", credential) + .build(); + }).build(); retrofitBuilder.client(adaptedClient); } From 4ec75895b3955eeed0cf350594224c5711cb9fd4 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Wed, 25 May 2022 15:11:53 +0700 Subject: [PATCH 07/15] Updating Proxy Configurations --- .../impl/BinanceApiServiceGenerator.java | 91 +++++++++++-------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index 8da045918..9e962a8cf 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -3,11 +3,12 @@ import java.io.IOException; import java.net.*; import java.net.Authenticator; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; -import com.sun.net.httpserver.HttpsConfigurator; import okhttp3.*; import org.apache.commons.lang3.StringUtils; @@ -19,7 +20,8 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; -import javax.annotation.Nullable; +import javax.net.ssl.*; + /** * Generates a Binance API implementation based on @see @@ -34,11 +36,30 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final int port = 3128; private final Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, port)); + private final CertificatePinner certificatePinner = new CertificatePinner.Builder() + .add("*.binance.com", "sha256/f7ipmaGK2IVZy864hvXgKTJKw4SKC2tE29F0f0/Vj+s=") + .build(); + + TrustManager TRUST_ALL_CERTS = new X509TrustManager() { + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { + } + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { + } + + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return new java.security.cert.X509Certificate[]{}; + } + }; + private final ProxySelector proxySelector = new ProxySelector() { @Override public List select(URI uri) { - List list = new ArrayList<>(); + List list = new ArrayList(); list.add(proxy); return list; } @@ -50,23 +71,23 @@ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { }; { - Dispatcher dispatcher = new Dispatcher(); - dispatcher.setMaxRequestsPerHost(500); - dispatcher.setMaxRequests(500); - sharedClient = new OkHttpClient.Builder() - .dispatcher(dispatcher) - .followRedirects(false) - .followSslRedirects(false) - .proxySelector(proxySelector) - .proxy(proxy) - .proxyAuthenticator((route, response) -> { - String credential = Credentials.basic("vextabit", "vgm2022"); - return response.request().newBuilder() - .header("Proxy-Authorization", credential) - .build(); - }) - .pingInterval(20, TimeUnit.SECONDS) - .build(); + try { + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, new TrustManager[]{TRUST_ALL_CERTS}, new java.security.SecureRandom()); + + Dispatcher dispatcher = new Dispatcher(); + dispatcher.setMaxRequestsPerHost(500); + dispatcher.setMaxRequests(500); + sharedClient = new OkHttpClient.Builder() + .dispatcher(dispatcher) + .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) TRUST_ALL_CERTS) + .hostnameVerifier((hostname, session) -> true) + .pingInterval(20, TimeUnit.SECONDS) + .build(); + + } catch (NoSuchAlgorithmException | KeyManagementException e) { + throw new RuntimeException(e); + } } @Override @@ -77,22 +98,20 @@ public S createService(Class serviceClass, String apiKey, String secret) if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { retrofitBuilder.client(sharedClient); } else { - // `adaptedClient` will use its own interceptor, but share thread pool etc with - // the 'parent' client - AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); - OkHttpClient adaptedClient = sharedClient.newBuilder() - .addInterceptor(interceptor) - .followRedirects(false) - .followSslRedirects(false) - .proxySelector(proxySelector) - .proxy(proxy) - .proxyAuthenticator((route, response) -> { - String credential = Credentials.basic("vextabit", "vgm2022"); - return response.request().newBuilder() - .header("Proxy-Authorization", credential) - .build(); - }).build(); - retrofitBuilder.client(adaptedClient); + try { + AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, new TrustManager[]{TRUST_ALL_CERTS}, new java.security.SecureRandom()); + + OkHttpClient adaptedClient = sharedClient.newBuilder() + .addInterceptor(interceptor) + .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) TRUST_ALL_CERTS) + .hostnameVerifier((hostname, session) -> true) + .build(); + retrofitBuilder.client(adaptedClient); + } catch (NoSuchAlgorithmException | KeyManagementException e) { + throw new RuntimeException(e); + } } Retrofit retrofit = retrofitBuilder.build(); From 3586e4c15289aadfebfd965bd25ba724f4c34db9 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Wed, 25 May 2022 20:16:51 +0700 Subject: [PATCH 08/15] Updating Proxy Configurations --- .../impl/BinanceApiServiceGenerator.java | 76 +++++-------------- 1 file changed, 19 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index 9e962a8cf..0501fd5b0 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -32,36 +32,17 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final OkHttpClient sharedClient; private final Converter.Factory converterFactory = JacksonConverterFactory.create(); - private final String hostname = "159.65.4.199"; - private final int port = 3128; - private final Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, port)); - - private final CertificatePinner certificatePinner = new CertificatePinner.Builder() - .add("*.binance.com", "sha256/f7ipmaGK2IVZy864hvXgKTJKw4SKC2tE29F0f0/Vj+s=") - .build(); - - TrustManager TRUST_ALL_CERTS = new X509TrustManager() { - @Override - public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { - } - - @Override - public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { - } - - @Override - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return new java.security.cert.X509Certificate[]{}; - } - }; - private final ProxySelector proxySelector = new ProxySelector() { + private final List noProxy = new ArrayList<>(); + private final List proxies = new ArrayList<>(); @Override public List select(URI uri) { - List list = new ArrayList(); - list.add(proxy); - return list; + noProxy.add(Proxy.NO_PROXY); + InetSocketAddress inetSocketAddress = new InetSocketAddress("159.65.4.199", 3128); + Proxy proxy = new Proxy(Proxy.Type.HTTP, inetSocketAddress); + proxies.add(proxy); + return proxies; } @Override @@ -71,23 +52,15 @@ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { }; { - try { - SSLContext sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new TrustManager[]{TRUST_ALL_CERTS}, new java.security.SecureRandom()); - - Dispatcher dispatcher = new Dispatcher(); - dispatcher.setMaxRequestsPerHost(500); - dispatcher.setMaxRequests(500); - sharedClient = new OkHttpClient.Builder() - .dispatcher(dispatcher) - .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) TRUST_ALL_CERTS) - .hostnameVerifier((hostname, session) -> true) - .pingInterval(20, TimeUnit.SECONDS) - .build(); - - } catch (NoSuchAlgorithmException | KeyManagementException e) { - throw new RuntimeException(e); - } + ProxySelector.setDefault(proxySelector); + + Dispatcher dispatcher = new Dispatcher(); + dispatcher.setMaxRequestsPerHost(500); + dispatcher.setMaxRequests(500); + sharedClient = new OkHttpClient.Builder() + .dispatcher(dispatcher) + .pingInterval(20, TimeUnit.SECONDS) + .build(); } @Override @@ -98,20 +71,9 @@ public S createService(Class serviceClass, String apiKey, String secret) if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { retrofitBuilder.client(sharedClient); } else { - try { - AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); - SSLContext sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new TrustManager[]{TRUST_ALL_CERTS}, new java.security.SecureRandom()); - - OkHttpClient adaptedClient = sharedClient.newBuilder() - .addInterceptor(interceptor) - .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) TRUST_ALL_CERTS) - .hostnameVerifier((hostname, session) -> true) - .build(); - retrofitBuilder.client(adaptedClient); - } catch (NoSuchAlgorithmException | KeyManagementException e) { - throw new RuntimeException(e); - } + AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); + OkHttpClient adaptedClient = sharedClient.newBuilder().addInterceptor(interceptor).build(); + retrofitBuilder.client(adaptedClient); } Retrofit retrofit = retrofitBuilder.build(); From cd41b5a254b13212cf05b11ee8362b47f63e0fcf Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Wed, 25 May 2022 20:30:19 +0700 Subject: [PATCH 09/15] Updating Proxy Configurations --- .../impl/BinanceApiServiceGenerator.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index 0501fd5b0..fb24dd3e2 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -2,14 +2,12 @@ import java.io.IOException; import java.net.*; -import java.net.Authenticator; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import okhttp3.*; +import okhttp3.Authenticator; import org.apache.commons.lang3.StringUtils; import com.binance.api.client.BinanceApiWebSocketClient; @@ -20,7 +18,7 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; -import javax.net.ssl.*; +import javax.annotation.Nullable; /** @@ -32,6 +30,17 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final OkHttpClient sharedClient; private final Converter.Factory converterFactory = JacksonConverterFactory.create(); + private final Authenticator authenticator = new Authenticator() { + @Nullable + @Override + public Request authenticate(Route route, Response response) throws IOException { + String credential = Credentials.basic("vextabit", "vgm2022"); + return response.request().newBuilder() + .header("Proxy-Authorization", credential) + .build(); + } + }; + private final ProxySelector proxySelector = new ProxySelector() { private final List noProxy = new ArrayList<>(); private final List proxies = new ArrayList<>(); @@ -59,6 +68,8 @@ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { dispatcher.setMaxRequests(500); sharedClient = new OkHttpClient.Builder() .dispatcher(dispatcher) + .proxySelector(proxySelector) + .proxyAuthenticator(authenticator) .pingInterval(20, TimeUnit.SECONDS) .build(); } @@ -67,12 +78,16 @@ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { public S createService(Class serviceClass, String apiKey, String secret) { Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl(BinanceApiConfig.getApiBaseUrl()) .addConverterFactory(converterFactory); + ProxySelector.setDefault(proxySelector); if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { retrofitBuilder.client(sharedClient); } else { AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); - OkHttpClient adaptedClient = sharedClient.newBuilder().addInterceptor(interceptor).build(); + OkHttpClient adaptedClient = sharedClient.newBuilder().addInterceptor(interceptor) + .proxySelector(proxySelector) + .proxyAuthenticator(authenticator) + .build(); retrofitBuilder.client(adaptedClient); } From f3ec991986256ecbf58c63b531375df429c152b5 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Thu, 26 May 2022 00:15:20 +0700 Subject: [PATCH 10/15] Patching Up... Removing Proxy Connection --- .../impl/BinanceApiServiceGenerator.java | 88 ++++++++++++------- 1 file changed, 56 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index fb24dd3e2..b6a483257 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -2,12 +2,14 @@ import java.io.IOException; import java.net.*; +import java.net.Authenticator; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import okhttp3.*; -import okhttp3.Authenticator; import org.apache.commons.lang3.StringUtils; import com.binance.api.client.BinanceApiWebSocketClient; @@ -18,7 +20,7 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; -import javax.annotation.Nullable; +import javax.net.ssl.*; /** @@ -30,28 +32,36 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final OkHttpClient sharedClient; private final Converter.Factory converterFactory = JacksonConverterFactory.create(); - private final Authenticator authenticator = new Authenticator() { - @Nullable + private final String hostname = "159.65.4.199"; + private final int port = 3128; + private final Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, port)); + + private final CertificatePinner certificatePinner = new CertificatePinner.Builder() + .add("*.binance.com", "sha256/f7ipmaGK2IVZy864hvXgKTJKw4SKC2tE29F0f0/Vj+s=") + .build(); + + TrustManager TRUST_ALL_CERTS = new X509TrustManager() { @Override - public Request authenticate(Route route, Response response) throws IOException { - String credential = Credentials.basic("vextabit", "vgm2022"); - return response.request().newBuilder() - .header("Proxy-Authorization", credential) - .build(); + public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { + } + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { + } + + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return new java.security.cert.X509Certificate[]{}; } }; private final ProxySelector proxySelector = new ProxySelector() { - private final List noProxy = new ArrayList<>(); - private final List proxies = new ArrayList<>(); @Override public List select(URI uri) { - noProxy.add(Proxy.NO_PROXY); - InetSocketAddress inetSocketAddress = new InetSocketAddress("159.65.4.199", 3128); - Proxy proxy = new Proxy(Proxy.Type.HTTP, inetSocketAddress); - proxies.add(proxy); - return proxies; + List list = new ArrayList(); + list.add(proxy); + return list; } @Override @@ -61,17 +71,23 @@ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { }; { - ProxySelector.setDefault(proxySelector); + try { + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, new TrustManager[]{TRUST_ALL_CERTS}, new java.security.SecureRandom()); + + Dispatcher dispatcher = new Dispatcher(); + dispatcher.setMaxRequestsPerHost(500); + dispatcher.setMaxRequests(500); + sharedClient = new OkHttpClient.Builder() + .dispatcher(dispatcher) + .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) TRUST_ALL_CERTS) + .hostnameVerifier((hostname, session) -> true) + .pingInterval(20, TimeUnit.SECONDS) + .build(); - Dispatcher dispatcher = new Dispatcher(); - dispatcher.setMaxRequestsPerHost(500); - dispatcher.setMaxRequests(500); - sharedClient = new OkHttpClient.Builder() - .dispatcher(dispatcher) - .proxySelector(proxySelector) - .proxyAuthenticator(authenticator) - .pingInterval(20, TimeUnit.SECONDS) - .build(); + } catch (NoSuchAlgorithmException | KeyManagementException e) { + throw new RuntimeException(e); + } } @Override @@ -83,12 +99,20 @@ public S createService(Class serviceClass, String apiKey, String secret) if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { retrofitBuilder.client(sharedClient); } else { - AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); - OkHttpClient adaptedClient = sharedClient.newBuilder().addInterceptor(interceptor) - .proxySelector(proxySelector) - .proxyAuthenticator(authenticator) - .build(); - retrofitBuilder.client(adaptedClient); + try { + AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, new TrustManager[]{TRUST_ALL_CERTS}, new java.security.SecureRandom()); + + OkHttpClient adaptedClient = sharedClient.newBuilder() + .addInterceptor(interceptor) + .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) TRUST_ALL_CERTS) + .hostnameVerifier((hostname, session) -> true) + .build(); + retrofitBuilder.client(adaptedClient); + } catch (NoSuchAlgorithmException | KeyManagementException e) { + throw new RuntimeException(e); + } } Retrofit retrofit = retrofitBuilder.build(); From af959a79165d2a10639cd961ab899e0522dedcf3 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Thu, 26 May 2022 00:36:09 +0700 Subject: [PATCH 11/15] Next... --- .../impl/BinanceApiServiceGenerator.java | 46 ++++--------------- 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index b6a483257..bad3c20eb 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -1,26 +1,21 @@ package com.binance.api.client.impl; -import java.io.IOException; -import java.net.*; -import java.net.Authenticator; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import okhttp3.*; -import org.apache.commons.lang3.StringUtils; - import com.binance.api.client.BinanceApiWebSocketClient; import com.binance.api.client.config.BinanceApiConfig; import com.binance.api.client.security.AuthenticationInterceptor; - +import okhttp3.Dispatcher; +import okhttp3.OkHttpClient; +import org.apache.commons.lang3.StringUtils; import retrofit2.Converter; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; -import javax.net.ssl.*; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.util.concurrent.TimeUnit; /** @@ -32,14 +27,6 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final OkHttpClient sharedClient; private final Converter.Factory converterFactory = JacksonConverterFactory.create(); - private final String hostname = "159.65.4.199"; - private final int port = 3128; - private final Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, port)); - - private final CertificatePinner certificatePinner = new CertificatePinner.Builder() - .add("*.binance.com", "sha256/f7ipmaGK2IVZy864hvXgKTJKw4SKC2tE29F0f0/Vj+s=") - .build(); - TrustManager TRUST_ALL_CERTS = new X509TrustManager() { @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { @@ -55,20 +42,6 @@ public java.security.cert.X509Certificate[] getAcceptedIssuers() { } }; - private final ProxySelector proxySelector = new ProxySelector() { - - @Override - public List select(URI uri) { - List list = new ArrayList(); - list.add(proxy); - return list; - } - - @Override - public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { - - } - }; { try { @@ -94,7 +67,6 @@ public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { public S createService(Class serviceClass, String apiKey, String secret) { Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl(BinanceApiConfig.getApiBaseUrl()) .addConverterFactory(converterFactory); - ProxySelector.setDefault(proxySelector); if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { retrofitBuilder.client(sharedClient); From cf36df3a0556e4a90eec69d6eb92de41f0bd62d2 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Thu, 26 May 2022 00:47:44 +0700 Subject: [PATCH 12/15] Fix --- .../impl/BinanceApiServiceGenerator.java | 65 ++++--------------- 1 file changed, 13 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index bad3c20eb..a498e0648 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -10,11 +10,6 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; import java.util.concurrent.TimeUnit; @@ -27,40 +22,14 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final OkHttpClient sharedClient; private final Converter.Factory converterFactory = JacksonConverterFactory.create(); - TrustManager TRUST_ALL_CERTS = new X509TrustManager() { - @Override - public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { - } - - @Override - public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { - } - - @Override - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return new java.security.cert.X509Certificate[]{}; - } - }; - - { - try { - SSLContext sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new TrustManager[]{TRUST_ALL_CERTS}, new java.security.SecureRandom()); - - Dispatcher dispatcher = new Dispatcher(); - dispatcher.setMaxRequestsPerHost(500); - dispatcher.setMaxRequests(500); - sharedClient = new OkHttpClient.Builder() - .dispatcher(dispatcher) - .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) TRUST_ALL_CERTS) - .hostnameVerifier((hostname, session) -> true) - .pingInterval(20, TimeUnit.SECONDS) - .build(); - - } catch (NoSuchAlgorithmException | KeyManagementException e) { - throw new RuntimeException(e); - } + Dispatcher dispatcher = new Dispatcher(); + dispatcher.setMaxRequestsPerHost(500); + dispatcher.setMaxRequests(500); + sharedClient = new OkHttpClient.Builder() + .dispatcher(dispatcher) + .pingInterval(20, TimeUnit.SECONDS) + .build(); } @Override @@ -71,20 +40,12 @@ public S createService(Class serviceClass, String apiKey, String secret) if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { retrofitBuilder.client(sharedClient); } else { - try { - AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); - SSLContext sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new TrustManager[]{TRUST_ALL_CERTS}, new java.security.SecureRandom()); - - OkHttpClient adaptedClient = sharedClient.newBuilder() - .addInterceptor(interceptor) - .sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) TRUST_ALL_CERTS) - .hostnameVerifier((hostname, session) -> true) - .build(); - retrofitBuilder.client(adaptedClient); - } catch (NoSuchAlgorithmException | KeyManagementException e) { - throw new RuntimeException(e); - } + AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); + OkHttpClient adaptedClient = sharedClient.newBuilder() + .addInterceptor(interceptor) + .hostnameVerifier((hostname, session) -> true) + .build(); + retrofitBuilder.client(adaptedClient); } Retrofit retrofit = retrofitBuilder.build(); From efb2717d6f493cb108cb8c3ecb2174a43585c9b5 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Thu, 26 May 2022 00:48:17 +0700 Subject: [PATCH 13/15] Fix --- .../com/binance/api/client/impl/BinanceApiServiceGenerator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index a498e0648..97bbc8efb 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -43,7 +43,6 @@ public S createService(Class serviceClass, String apiKey, String secret) AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); OkHttpClient adaptedClient = sharedClient.newBuilder() .addInterceptor(interceptor) - .hostnameVerifier((hostname, session) -> true) .build(); retrofitBuilder.client(adaptedClient); } From ea3f66acb5cf925b1959500b28aadf207d39ba50 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Thu, 26 May 2022 16:38:58 +0700 Subject: [PATCH 14/15] Fixing Proxy Settings --- .../impl/BinanceApiServiceGenerator.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index 97bbc8efb..7b54c00ea 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -3,6 +3,8 @@ import com.binance.api.client.BinanceApiWebSocketClient; import com.binance.api.client.config.BinanceApiConfig; import com.binance.api.client.security.AuthenticationInterceptor; +import okhttp3.Authenticator; +import okhttp3.Credentials; import okhttp3.Dispatcher; import okhttp3.OkHttpClient; import org.apache.commons.lang3.StringUtils; @@ -10,6 +12,8 @@ import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; +import java.net.InetSocketAddress; +import java.net.Proxy; import java.util.concurrent.TimeUnit; @@ -22,27 +26,39 @@ public class BinanceApiServiceGenerator implements ApiGenerator { private final OkHttpClient sharedClient; private final Converter.Factory converterFactory = JacksonConverterFactory.create(); + Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("45.76.144.167", 3128)); + + Authenticator proxyAuthenticator = (route, response) -> { + String credential = Credentials.basic("vexta", "vgm2022"); + return response.request().newBuilder().header("Proxy-Authorization", credential).build(); + }; + { Dispatcher dispatcher = new Dispatcher(); dispatcher.setMaxRequestsPerHost(500); dispatcher.setMaxRequests(500); - sharedClient = new OkHttpClient.Builder() + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + sharedClient = builder .dispatcher(dispatcher) + .proxyAuthenticator(proxyAuthenticator) + .proxy(proxy) .pingInterval(20, TimeUnit.SECONDS) .build(); } @Override public S createService(Class serviceClass, String apiKey, String secret) { - Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl(BinanceApiConfig.getApiBaseUrl()) - .addConverterFactory(converterFactory); + Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl(BinanceApiConfig.getApiBaseUrl()).addConverterFactory(converterFactory); if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) { retrofitBuilder.client(sharedClient); } else { AuthenticationInterceptor interceptor = new AuthenticationInterceptor(apiKey, secret); - OkHttpClient adaptedClient = sharedClient.newBuilder() + OkHttpClient adaptedClient = sharedClient + .newBuilder() .addInterceptor(interceptor) + .proxyAuthenticator(proxyAuthenticator) + .proxy(proxy) .build(); retrofitBuilder.client(adaptedClient); } From 21f0441dd928a42b7a2e823e3c71791bd5961fe9 Mon Sep 17 00:00:00 2001 From: Dimas Victor Date: Thu, 26 May 2022 22:21:55 +0700 Subject: [PATCH 15/15] Fixing Proxy Settings --- .../binance/api/client/impl/BinanceApiServiceGenerator.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java index 7b54c00ea..38769f1b4 100644 --- a/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java +++ b/src/main/java/com/binance/api/client/impl/BinanceApiServiceGenerator.java @@ -40,8 +40,6 @@ public class BinanceApiServiceGenerator implements ApiGenerator { OkHttpClient.Builder builder = new OkHttpClient.Builder(); sharedClient = builder .dispatcher(dispatcher) - .proxyAuthenticator(proxyAuthenticator) - .proxy(proxy) .pingInterval(20, TimeUnit.SECONDS) .build(); } @@ -57,8 +55,6 @@ public S createService(Class serviceClass, String apiKey, String secret) OkHttpClient adaptedClient = sharedClient .newBuilder() .addInterceptor(interceptor) - .proxyAuthenticator(proxyAuthenticator) - .proxy(proxy) .build(); retrofitBuilder.client(adaptedClient); }