From f40a26ad7c8abdf14410b535e9e9aacf221b2063 Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Thu, 11 Jan 2024 16:27:32 -0500 Subject: [PATCH] Push for proxy test pt 4! --- .../data/settings/ProxyClientSettings.java | 4 +++- .../tiktok/http/HttpClientFactory.java | 3 +-- .../tiktok/http/HttpProxyClient.java | 10 +++++--- .../websocket/TikTokWebSocketClient.java | 23 ++++++++++++++----- .../websocket/TikTokWebSocketListener.java | 20 +++++++--------- .../jwdeveloper/tiktok/ProxyExample.java | 13 +++++++++-- 6 files changed, 47 insertions(+), 26 deletions(-) diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java index 5fef5d1..0832b02 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java @@ -33,7 +33,7 @@ import java.util.function.Consumer; @Setter public class ProxyClientSettings implements Iterator { - private boolean enabled; + private boolean enabled, lastSuccess; private Rotation rotation = Rotation.CONSECUTIVE; private final List proxyList = new ArrayList<>(); private int index = 0; @@ -65,6 +65,8 @@ public class ProxyClientSettings implements Iterator @Override public ProxyData next() { + if (lastSuccess) + return proxyList.get(index); var nextProxy = switch (rotation) { case CONSECUTIVE -> { diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpClientFactory.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpClientFactory.java index e72b4f3..c645560 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpClientFactory.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpClientFactory.java @@ -37,9 +37,8 @@ public class HttpClientFactory { //Does not contains default httpClientSettings, Params, headers, etd public HttpClientBuilder clientEmpty(String url) { - var settings = new HttpClientSettings(); settings.setProxyClientSettings(liveClientSettings.getHttpSettings().getProxyClientSettings()); - return new HttpClientBuilder(url,settings); + return new HttpClientBuilder(url, settings); } } \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpProxyClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpProxyClient.java index e62c263..e228c7d 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpProxyClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/HttpProxyClient.java @@ -66,12 +66,15 @@ public class HttpProxyClient extends HttpClient var response = client.send(request, HttpResponse.BodyHandlers.ofByteArray()); if (response.statusCode() != 200) { + proxySettings.setLastSuccess(false); continue; } + proxySettings.setLastSuccess(true); return Optional.of(response); } catch (HttpConnectTimeoutException | ConnectException e) { if (proxySettings.isAutoDiscard()) proxySettings.remove(); + proxySettings.setLastSuccess(false); } catch (Exception e) { throw new TikTokLiveRequestException(e); } @@ -92,10 +95,9 @@ public class HttpProxyClient extends HttpClient while (proxySettings.hasNext()) { try { - var proxyData = proxySettings.next(); - Proxy proxy = new Proxy(Proxy.Type.SOCKS, proxyData.toSocketAddress()); + Proxy proxy = new Proxy(Proxy.Type.SOCKS, proxySettings.next().toSocketAddress()); - System.err.println("Attempting connection to "+ url +" with proxy: "+proxyData); + System.err.println("Connecting to "+ url); HttpsURLConnection socksConnection = (HttpsURLConnection) url.openConnection(proxy); socksConnection.setSSLSocketFactory(sc.getSocketFactory()); socksConnection.setConnectTimeout(httpClientSettings.getTimeout().toMillisPart()); @@ -113,11 +115,13 @@ public class HttpProxyClient extends HttpClient var response = createHttpResponse(body, toUrl(), responseInfo); + proxySettings.setLastSuccess(true); return Optional.of(response); } catch (SocketException | SocketTimeoutException e) { e.printStackTrace(); if (proxySettings.isAutoDiscard()) proxySettings.remove(); + proxySettings.setLastSuccess(false); } catch (Exception e) { throw new TikTokLiveRequestException(e); } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java index 492cbbc..936ca0b 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java @@ -31,7 +31,9 @@ import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; import io.github.jwdeveloper.tiktok.live.LiveClient; import org.java_websocket.client.WebSocketClient; +import javax.net.ssl.*; import java.net.Proxy; +import java.security.cert.X509Certificate; import java.util.HashMap; public class TikTokWebSocketClient implements SocketClient { @@ -68,11 +70,11 @@ public class TikTokWebSocketClient implements SocketClient { tikTokEventHandler, liveClient); - ProxyClientSettings proxyClientSettings = clientSettings.getHttpSettings().getProxyClientSettings(); - - if (proxyClientSettings.isEnabled()) - connectProxy(proxyClientSettings); - else + // ProxyClientSettings proxyClientSettings = clientSettings.getHttpSettings().getProxyClientSettings(); + // + // if (proxyClientSettings.isEnabled()) + // connectProxy(proxyClientSettings); + // else connectDefault(); } @@ -105,6 +107,15 @@ public class TikTokWebSocketClient implements SocketClient { public boolean tryProxyConnection(ProxyClientSettings proxySettings, ProxyData proxyData) { webSocketClient.setProxy(new Proxy(proxySettings.getType(), proxyData.toSocketAddress())); try { + if (proxySettings.getType() == Proxy.Type.SOCKS) { + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[]{new X509TrustManager() { + public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {} + public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {} + public X509Certificate[] getAcceptedIssuers() { return null; } + }}, null); + webSocketClient.setSocketFactory(sc.getSocketFactory()); + } webSocketClient.connect(); return true; } catch (Exception e) @@ -114,7 +125,7 @@ public class TikTokWebSocketClient implements SocketClient { } public void stop() { - if (isConnected && webSocketClient != null) { + if (isConnected && webSocketClient != null && webSocketClient.isOpen()) { webSocketClient.closeConnection(0, ""); } webSocketClient = null; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java index 7498d01..a642827 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java @@ -23,23 +23,18 @@ package io.github.jwdeveloper.tiktok.websocket; import com.google.protobuf.ByteString; -import io.github.jwdeveloper.tiktok.data.events.TikTokConnectedEvent; -import io.github.jwdeveloper.tiktok.data.events.TikTokDisconnectedEvent; -import io.github.jwdeveloper.tiktok.data.events.TikTokErrorEvent; +import io.github.jwdeveloper.tiktok.*; +import io.github.jwdeveloper.tiktok.data.events.*; import io.github.jwdeveloper.tiktok.exceptions.TikTokProtocolBufferException; -import io.github.jwdeveloper.tiktok.TikTokLiveEventHandler; -import io.github.jwdeveloper.tiktok.TikTokLiveMessageHandler; import io.github.jwdeveloper.tiktok.live.LiveClient; -import io.github.jwdeveloper.tiktok.messages.webcast.WebcastPushFrame; -import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse; +import io.github.jwdeveloper.tiktok.messages.webcast.*; import org.java_websocket.client.WebSocketClient; import org.java_websocket.drafts.Draft_6455; import org.java_websocket.handshake.ServerHandshake; import java.net.URI; import java.nio.ByteBuffer; -import java.util.Map; -import java.util.Optional; +import java.util.*; public class TikTokWebSocketListener extends WebSocketClient { @@ -103,8 +98,9 @@ public class TikTokWebSocketListener extends WebSocketClient { @Override - public void onClose(int i, String s, boolean b) { + public void onClose(int code, String reason, boolean remote) { tikTokEventHandler.publish(tikTokLiveClient, new TikTokDisconnectedEvent()); + tikTokLiveClient.disconnect(); } @Override @@ -144,6 +140,6 @@ public class TikTokWebSocketListener extends WebSocketClient { @Override public void onMessage(String s) { - + System.err.println(s); } -} +} \ No newline at end of file diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java index f3ca064..ea16df6 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java @@ -40,7 +40,7 @@ public class ProxyExample return new AbstractMap.SimpleEntry<>(split[0], Integer.parseInt(split[1])); }).toList()); - TikTokLive.newClient("boost_grow_live_qc") + TikTokLive.newClient("dash4214") .configure(clientSettings -> { clientSettings.setPrintToConsole(true); @@ -53,14 +53,23 @@ public class ProxyExample entries.forEach(entry -> proxySettings.addProxy(entry.getKey(), entry.getValue())); }); }) + .onComment((liveClient, event) -> { + liveClient.getLogger().info(event.getUser().getName()+": "+event.getText()); + }) .onConnected((liveClient, event) -> { liveClient.getLogger().info("Hello world!"); }) + .onDisconnected((liveClient, event) -> + { + liveClient.getLogger().info("Goodbye world!"); + }) .onError((liveClient, event) -> { event.getException().printStackTrace(); }) - .buildAndConnect(); + .buildAndConnect(); + + System.in.read(); } } \ No newline at end of file