Java से reCAPTCHA Enterprise हल करें
टोकन का अनुरोध करने के लिए Java के HttpClient और JSON प्रतिक्रिया पढ़ने के लिए Gson का उपयोग करें। यह उदाहरण REST API कॉल करता है, टास्क पूरा होने की प्रतीक्षा करता है और reCAPTCHA Enterprise समाधान लौटाता है।
इस पेज पर
साइट और एनवायरनमेंट सेट अप करें
Java 21 या उसके बाद के संस्करण का उपयोग करें। कंसोल में अपने लक्ष्य के लिए सक्रिय साइट प्रोफ़ाइल बनाएँ, फिर Java लॉन्च करने वाले एनवायरनमेंट में SOLVETHREE_API_KEY और SOLVETHREE_PROXY सेट करें।
accounts.example.com की जगह वह होस्टनाम दें जिसकी प्रोफ़ाइल बनाई है और login की जगह पेज पर इस्तेमाल होने वाला ऐक्शन दें। site फ़ील्ड में स्कीम या पाथ के बिना होस्टनाम दिया जाता है।
Solve.java सहेजें और चलाएँ
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.UUID;
public class Solve {
static final HttpClient HTTP = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(15)).build();
static final String KEY = System.getenv("SOLVETHREE_API_KEY");
static JsonObject api(String path, JsonObject body, long deadline) throws Exception {
long remaining = deadline - System.nanoTime();
if (remaining <= 0) throw new IllegalStateException("Keep the task ID and resume polling");
var builder = HttpRequest.newBuilder(URI.create("https://api.solvethree.com/v1" + path))
.timeout(Duration.ofNanos(Math.min(remaining, Duration.ofSeconds(30).toNanos())))
.header("Authorization", "Bearer " + KEY)
.header("Content-Type", "application/json");
if (body == null) builder.GET();
else builder.POST(HttpRequest.BodyPublishers.ofString(body.toString()));
var response = HTTP.send(builder.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("API HTTP " + response.statusCode());
return JsonParser.parseString(response.body()).getAsJsonObject();
}
public static void main(String[] args) throws Exception {
String proxy = System.getenv("SOLVETHREE_PROXY");
if (KEY == null || proxy == null) throw new IllegalArgumentException("Set the API key and proxy");
var input = new JsonObject();
input.addProperty("site", "accounts.example.com");
input.addProperty("action", "login");
input.addProperty("proxy", proxy);
input.addProperty("requestId", UUID.randomUUID().toString());
// Save input before creation if the task must be recovered after restart.
long deadline = System.nanoTime() + Duration.ofSeconds(180).toNanos();
var task = api("/tasks?waitMs=0", input, deadline);
while (task.get("status").getAsString().equals("pending") || task.get("status").getAsString().equals("solving")) {
String id = URLEncoder.encode(task.get("id").getAsString(), StandardCharsets.UTF_8);
task = api("/tasks/" + id + "?waitMs=15000", null, deadline);
if (task.get("status").getAsString().equals("pending") || task.get("status").getAsString().equals("solving"))
Thread.sleep(1000);
}
if (!task.get("status").getAsString().equals("ready"))
throw new IllegalStateException("Task failed: " + task.get("errorCode")
+ ": " + task.get("error"));
var solution = task.getAsJsonObject("solution");
// Submit solution.token with userAgent/secChUa and the original proxy.
System.out.println("Ready task: " + task.get("id").getAsString());
}
}Solve.java वाली डायरेक्टरी से Gson JAR डाउनलोड करें, कंपाइल करें और चलाएँ:
curl --fail --location --output gson-2.15.0.jar \
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.15.0/gson-2.15.0.jar
javac -cp gson-2.15.0.jar Solve.java
java -cp .:gson-2.15.0.jar Solveये कमांड macOS/Linux के क्लासपाथ सेपरेटर : का उपयोग करते हैं। Windows पर वर्तमान डायरेक्टरी और Gson JAR के बीच ; का उपयोग करें।
परिणाम से टोकन पढ़ें
टास्क बनाते समय waitMs=0 का उपयोग होता है। लूप pending या solving स्थिति में उसी टास्क ID को प्राप्त करता रहता है और ready या failed पर रुक जाता है। हर GET अधिकतम 15 सेकंड प्रतीक्षा कर सकता है; कॉलर की कुल समय-सीमा 180 सेकंड है।
solution.get("token").getAsString() से टोकन पढ़ें। लौटाए गए userAgent और secChUa का उपयोग उसी प्रॉक्सी से भेजे जाने वाले लक्ष्य अनुरोध में करें। प्रोग्राम टास्क ID प्रिंट करता है, टोकन नहीं।
सबमिट करने के बाद लक्ष्य की प्रतिक्रिया जाँचें। तैयार टास्क बताता है कि समाधान जनरेट हो गया है; इससे यह साबित नहीं होता कि एप्लिकेशन ने उसे स्वीकार कर लिया।
त्रुटियाँ और बाधित अनुरोध
असफल HTTP प्रतिक्रिया मिलने पर हेल्पर रुक जाता है। अंतिम रूप से विफल टास्क errorCode और error रिपोर्ट करता है, और विफल समाधान का शुल्क वापस कर दिया जाता है। क्या ठीक करना है, यह तय करने के लिए API त्रुटि संदर्भ देखें।
अगर रीस्टार्ट के बाद रिकवरी चाहिए, तो जनरेट किए गए requestId और सटीक इनपुट सहेजें। अगर टास्क बनाते समय टाइमआउट हो जाए, तो वे इनपुट उसी ID के साथ दोबारा भेजें। अगर आपके पास पहले से टास्क ID है, तो उसे प्राप्त करें। इस प्रोग्राम को रीस्टार्ट करने से दूसरा UUID बनता है और एक और शुल्क योग्य टास्क बन सकता है।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।