From f397ad471d5dbf326e884bf9e19badec6f32885e Mon Sep 17 00:00:00 2001
From: reusedname <155286845+reusedname@users.noreply.github.com>
Date: Sun, 11 Feb 2024 12:18:01 +0500
Subject: [PATCH] (WIP) flaresolverr client

---
 .../java/ctbrec/io/FlaresolverrClient.java    | 67 +++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100644 common/src/main/java/ctbrec/io/FlaresolverrClient.java

diff --git a/common/src/main/java/ctbrec/io/FlaresolverrClient.java b/common/src/main/java/ctbrec/io/FlaresolverrClient.java
new file mode 100644
index 00000000..92529dd5
--- /dev/null
+++ b/common/src/main/java/ctbrec/io/FlaresolverrClient.java
@@ -0,0 +1,67 @@
+package ctbrec.io;
+
+import org.json.JSONObject;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import okhttp3.*;
+import okhttp3.OkHttpClient.Builder;
+import ctbrec.GlobalThreadPool;
+
+
+public class FlaresolverrClient {
+    public String api_url = "http://localhost:8191/v1";
+    protected OkHttpClient client = new OkHttpClient();
+    protected JsonMapper mapper = new JsonMapper();
+
+    public FlaresolverrClient() {
+    }
+
+    public FlaresolverrClient(String apiUrl) {
+        api_url = apiUrl;
+    }
+
+    public JsonNode createSession(String name) throws Exception {
+        var body = mapper.createObjectNode()
+            .put("cmd", "sessions.create")
+            .put("session", name);
+
+        return makeApiCall(body);
+    }
+
+    public JsonNode destroySession(String name) throws Exception {
+        var body = mapper.createObjectNode()
+            .put("cmd", "sessions.destroy")
+            .put("session", name);
+
+        return makeApiCall(body);
+    }
+
+    public JsonNode getCookies(String url) throws Exception {
+        return getCookies(url, 60000);
+    }
+
+    public JsonNode getCookies(String url, int timeout_ms) throws Exception {
+        var body = mapper.createObjectNode()
+            .put("cmd", "request.get")
+            .put("url", url)
+            .put("maxTimeout", timeout_ms)
+            .put("returnOnlyCookies", true);
+
+        return makeApiCall(body);
+    }
+
+    protected JsonNode makeApiCall(ObjectNode body) throws Exception {
+        var requestBody = RequestBody.create(mapper.writeValueAsString(body), MediaType.get("application/json"));
+        var request = new Request.Builder()
+            .url(api_url)
+            .post(requestBody)
+            .build();
+
+        var response = client.newCall(request).execute();
+        return mapper.readTree(response.body().string());
+    }
+
+}