diff --git a/README.md b/README.md
index 7fa2058..124803a 100644
--- a/README.md
+++ b/README.md
@@ -43,6 +43,8 @@ Examples of API requests for different captcha types are available on the [Java
- [atbCAPTCHA](#atbcaptcha)
- [CyberSiARA](#cybersiara)
- [DataDome](#datadome)
+ - [CaptchaFox](#captchafox)
+ - [Temu](#temu)
- [Other methods](#other-methods)
- [send / getResult](#send--getresult)
- [balance](#balance)
@@ -496,6 +498,34 @@ captcha.setUserAgent("Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHT
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");
```
+### CaptchaFox
+
+[API method description.](https://2captcha.com/2captcha-api#captchafox)
+
+This method can be used to solve CaptchaFox using a token. Returns a token.
+
+```java
+Captchafox captcha = new Captchafox();
+captcha.setSiteKey("sk_ILKWNruBBVKDOM7dZs59KHnDLEWiH");
+captcha.setUrl("https://mysite.com/page/with/captchafox");
+captcha.setProxy("HTTPS", "login:password@IP_address:PORT");
+captcha.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36");
+```
+
+### Temu
+
+[API method description.](https://2captcha.com/2captcha-api#temucaptcha)
+
+This method can be used to solve Temucaptch. Returns a coordinates.
+
+```java
+Temu captcha = new Temu();
+captcha.setBody(body);
+captcha.setPart1(part1);
+captcha.setPart2(part2);
+captcha.setPart3(part3);
+```
+
## Other methods
### send / getResult
diff --git a/src/main/java/com/twocaptcha/captcha/Captcha.java b/src/main/java/com/twocaptcha/captcha/Captcha.java
index 523d481..f9fa73f 100644
--- a/src/main/java/com/twocaptcha/captcha/Captcha.java
+++ b/src/main/java/com/twocaptcha/captcha/Captcha.java
@@ -64,4 +64,7 @@ public Map getFiles() {
return new HashMap<>(files);
}
+ public void setUserAgent(String userAgent) {
+ params.put("userAgent", userAgent);
+ }
}
diff --git a/src/main/java/com/twocaptcha/captcha/Captchafox.java b/src/main/java/com/twocaptcha/captcha/Captchafox.java
new file mode 100644
index 0000000..0ad654d
--- /dev/null
+++ b/src/main/java/com/twocaptcha/captcha/Captchafox.java
@@ -0,0 +1,18 @@
+package com.twocaptcha.captcha;
+
+public class Captchafox extends Captcha {
+
+ public Captchafox() {
+ super();
+ params.put("method", "captchafox");
+ }
+
+ public void setSiteKey(String siteKey) {
+ params.put("sitekey", siteKey);
+ }
+
+ public void setUrl(String url) {
+ params.put("pageurl", url);
+ }
+
+}
diff --git a/src/main/java/com/twocaptcha/captcha/Temu.java b/src/main/java/com/twocaptcha/captcha/Temu.java
new file mode 100644
index 0000000..6a5703d
--- /dev/null
+++ b/src/main/java/com/twocaptcha/captcha/Temu.java
@@ -0,0 +1,22 @@
+package com.twocaptcha.captcha;
+
+public class Temu extends Captcha {
+
+ public Temu() {
+ super();
+ params.put("method", "temuimage");
+ }
+
+ public void setBody(String body) {
+ params.put("body", body);
+ }
+ public void setPart1(String part1) {
+ params.put("part1", part1);
+ }
+ public void setPart2(String part2) {
+ params.put("part2", part2);
+ }
+ public void setPart3(String part3) {
+ params.put("part3", part3);
+ }
+}
diff --git a/src/main/java/examples/CaptchafoxExample.java b/src/main/java/examples/CaptchafoxExample.java
new file mode 100644
index 0000000..59dee0e
--- /dev/null
+++ b/src/main/java/examples/CaptchafoxExample.java
@@ -0,0 +1,26 @@
+package examples;
+
+import com.twocaptcha.TwoCaptcha;
+import com.twocaptcha.captcha.Captchafox;
+import com.twocaptcha.captcha.Turnstile;
+
+public class CaptchafoxExample {
+
+ public static void main(String[] args) {
+ TwoCaptcha solver = new TwoCaptcha(args[0]);
+
+ Captchafox captcha = new Captchafox();
+ captcha.setSiteKey("sk_ILKWNruBBVKDOM7dZs59KHnDLEWiH");
+ captcha.setUrl("https://mysite.com/page/with/captchafox");
+ captcha.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36");
+ captcha.setProxy("HTTPS", "login:password@IP_address:PORT");
+
+ try {
+ solver.solve(captcha);
+ System.out.println("Captcha solved: " + captcha.getCode());
+ } catch (Exception e) {
+ System.out.println("Error occurred: " + e.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/examples/TemuExample.java b/src/main/java/examples/TemuExample.java
new file mode 100644
index 0000000..9856628
--- /dev/null
+++ b/src/main/java/examples/TemuExample.java
@@ -0,0 +1,38 @@
+package examples;
+
+import com.twocaptcha.TwoCaptcha;
+import com.twocaptcha.captcha.Temu;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Base64;
+
+public class TemuExample {
+
+ public static void main(String[] args) throws Exception {
+ TwoCaptcha solver = new TwoCaptcha(args[0]);
+
+ byte[] bodyBytes = Files.readAllBytes(Paths.get("src/main/resources/temu/body.png"));
+ String body = Base64.getEncoder().encodeToString(bodyBytes);
+ byte[] part1Bytes = Files.readAllBytes(Paths.get("src/main/resources/temu/part1.png"));
+ String part1 = Base64.getEncoder().encodeToString(part1Bytes);
+ byte[] part2Bytes = Files.readAllBytes(Paths.get("src/main/resources/temu/part2.png"));
+ String part2 = Base64.getEncoder().encodeToString(part2Bytes);
+ byte[] part3Bytes = Files.readAllBytes(Paths.get("src/main/resources/temu/part3.png"));
+ String part3 = Base64.getEncoder().encodeToString(part3Bytes);
+
+ Temu captcha = new Temu();
+ captcha.setBody(body);
+ captcha.setPart1(part1);
+ captcha.setPart2(part2);
+ captcha.setPart3(part3);
+
+ try {
+ solver.solve(captcha);
+ System.out.println("Captcha solved: " + captcha.getCode());
+ } catch (Exception e) {
+ System.out.println("Error occurred: " + e.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/resources/temu/body.png b/src/main/resources/temu/body.png
new file mode 100644
index 0000000..e45ed92
Binary files /dev/null and b/src/main/resources/temu/body.png differ
diff --git a/src/main/resources/temu/part1.png b/src/main/resources/temu/part1.png
new file mode 100644
index 0000000..792f6de
Binary files /dev/null and b/src/main/resources/temu/part1.png differ
diff --git a/src/main/resources/temu/part2.png b/src/main/resources/temu/part2.png
new file mode 100644
index 0000000..de5a603
Binary files /dev/null and b/src/main/resources/temu/part2.png differ
diff --git a/src/main/resources/temu/part3.png b/src/main/resources/temu/part3.png
new file mode 100644
index 0000000..be84dba
Binary files /dev/null and b/src/main/resources/temu/part3.png differ
diff --git a/src/test/java/com/twocaptcha/CaptchafoxTest.java b/src/test/java/com/twocaptcha/CaptchafoxTest.java
new file mode 100644
index 0000000..869be8a
--- /dev/null
+++ b/src/test/java/com/twocaptcha/CaptchafoxTest.java
@@ -0,0 +1,28 @@
+package com.twocaptcha;
+
+import com.twocaptcha.captcha.Captchafox;
+import com.twocaptcha.captcha.Turnstile;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CaptchafoxTest extends AbstractWrapperTestCase {
+
+ public void testAllOptions() throws Exception {
+ Captchafox captcha = new Captchafox();
+ captcha.setSiteKey("sk_ILKWNruBBVKDOM7dZs59KHnDLEWiH");
+ captcha.setUrl("https://mysite.com/page/with/captchafox");
+ captcha.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36");
+
+ Map params = new HashMap<>();
+ params.put("method", "captchafox");
+ params.put("sitekey", "sk_ILKWNruBBVKDOM7dZs59KHnDLEWiH");
+ params.put("pageurl", "https://mysite.com/page/with/captchafox");
+ params.put("userAgent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36");
+ params.put("soft_id", "4581");
+ params.put("json", "0");
+
+ checkIfCorrectParamsSendAndResultReturned(captcha, params);
+ }
+
+}
\ No newline at end of file
diff --git a/src/test/java/com/twocaptcha/TemuTest.java b/src/test/java/com/twocaptcha/TemuTest.java
new file mode 100644
index 0000000..fe937f3
--- /dev/null
+++ b/src/test/java/com/twocaptcha/TemuTest.java
@@ -0,0 +1,29 @@
+package com.twocaptcha;
+
+import com.twocaptcha.captcha.Temu;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TemuTest extends AbstractWrapperTestCase {
+
+ public void testAllOptions() throws Exception {
+ Temu captcha = new Temu();
+ captcha.setBody("body");
+ captcha.setPart1("part1");
+ captcha.setPart2("part2");
+ captcha.setPart3("part3");
+
+ Map params = new HashMap<>();
+ params.put("method", "temuimage");
+ params.put("body", "body");
+ params.put("part1", "part1");
+ params.put("part2", "part2");
+ params.put("part3", "part3");
+ params.put("soft_id", "4581");
+ params.put("json", "0");
+
+ checkIfCorrectParamsSendAndResultReturned(captcha, params);
+ }
+
+}
\ No newline at end of file