C# से reCAPTCHA Enterprise हल करें

solvethree द्वारापढ़ने में 3 मिनट

आप C# से सीधे solvethree को कॉल कर सकते हैं। नीचे दिया गया उदाहरण reCAPTCHA v3 Enterprise टोकन का अनुरोध करता है, टास्क पूरा होने तक उसकी स्थिति जाँचता है और समाधान विफल होने पर रुक जाता है।

इस पेज पर

चलाने से पहले

.NET 8+ का उपयोग करें। अतिरिक्त NuGet पैकेज की ज़रूरत नहीं है।

  • कंसोल में अपने लक्ष्य होस्टनाम के लिए सक्रिय साइट प्रोफ़ाइल बनाएँ। साइट प्रोफ़ाइल सेटअप देखें।
  • SOLVETHREE_API_KEY को अपनी वर्कस्पेस API कुंजी और SOLVETHREE_PROXY को अपने HTTP(S) प्रॉक्सी URL पर सेट करें।
  • accounts.example.com और login की जगह अपना होस्टनाम और पेज पर इस्तेमाल होने वाला ऐक्शन दें। site के लिए स्कीम या पाथ के बिना होस्टनाम का उपयोग करें।

टास्क बनाएँ और परिणाम की प्रतीक्षा करें

dotnet new console से .NET कंसोल प्रोजेक्ट बनाएँ, Program.cs की जगह यह कोड रखें और dotnet run चलाएँ।

C# · Program.cs (.NET 8+)
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json.Nodes;

var key = Environment.GetEnvironmentVariable("SOLVETHREE_API_KEY")
    ?? throw new Exception("Set SOLVETHREE_API_KEY");
var proxy = Environment.GetEnvironmentVariable("SOLVETHREE_PROXY")
    ?? throw new Exception("Set SOLVETHREE_PROXY");
using var http = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", key);
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(180));

async Task<JsonObject> Api(HttpMethod method, string path, JsonObject? body = null)
{
    using var request = new HttpRequestMessage(method, "https://api.solvethree.com/v1" + path);
    if (body is not null)
        request.Content = new StringContent(body.ToJsonString(), Encoding.UTF8, "application/json");
    using var response = await http.SendAsync(request, deadline.Token);
    response.EnsureSuccessStatusCode();
    return JsonNode.Parse(await response.Content.ReadAsStringAsync(deadline.Token))!.AsObject();
}

var requestId = Guid.NewGuid().ToString(); // Save with these inputs for recovery.
var input = new JsonObject {
    ["site"] = "accounts.example.com", ["action"] = "login",
    ["proxy"] = proxy, ["requestId"] = requestId
};
var task = await Api(HttpMethod.Post, "/tasks?waitMs=0", input);
while (task["status"]!.GetValue<string>() is "pending" or "solving")
{
    var id = Uri.EscapeDataString(task["id"]!.GetValue<string>());
    task = await Api(HttpMethod.Get, "/tasks/" + id + "?waitMs=15000");
    if (task["status"]!.GetValue<string>() is "pending" or "solving")
        await Task.Delay(1000, deadline.Token);
}
if (task["status"]!.GetValue<string>() != "ready")
    throw new Exception("Task failed: " + task["errorCode"]?.GetValue<string>()
        + ": " + task["error"]?.GetValue<string>());
var solution = task["solution"]!.AsObject();
// Use solution["token"], ["userAgent"] and ["secChUa"] with the original proxy.
Console.WriteLine("Ready task: " + task["id"]!.GetValue<string>());

POST तुरंत टास्क लौटाने के लिए waitMs=0 का उपयोग करता है। फिर हर GET अपडेट के लिए अधिकतम 15 सेकंड प्रतीक्षा करता है। लूप pending या solving पर चलता रहता है और ready या failed पर रुक जाता है।

अनुरोध डिफ़ॉल्ट रूप से Enterprise v3 का उपयोग करता है। मानक v3 के लिए recaptchaType: v3 जोड़ें। reCAPTCHA टास्क बॉडी में type और url शामिल न करें।

अपने एप्लिकेशन में टोकन का उपयोग करें

टोकन solution["token"]!.GetValue<string>() में है। प्रोग्राम द्वारा प्रिंट किया गया टास्क ID, टास्क प्राप्त करने के लिए है; अपने एप्लिकेशन के CAPTCHA फ़ील्ड में टोकन का मान उपयोग करें।

लक्ष्य अनुरोध के User-Agent और sec-ch-ua हेडर के लिए solution["userAgent"] और solution["secChUa"] पढ़ें।

वह अनुरोध उसी प्रॉक्सी से भेजें जिसका उपयोग समाधान के लिए हुआ था। फिर एप्लिकेशन की प्रतिक्रिया जाँचें: टोकन जनरेट हो जाने से यह साबित नहीं होता कि लक्ष्य ने अनुरोध स्वीकार कर लिया।

अगर अनुरोध विफल हो जाए

विफल टास्क में errorCode और error शामिल होते हैं; उदाहरण रुककर इन्हें रिपोर्ट करता है। विफल समाधानों का शुल्क वापस कर दिया जाता है। 401 या 402 जैसी HTTP त्रुटि अनुरोध की एक अलग समस्या है—दोबारा कोशिश करने से पहले API त्रुटि संदर्भ देखें।

अगर टाइमआउट या प्रोसेस रीस्टार्ट के बाद रिकवरी चाहिए, तो requestId और टास्क के सटीक इनपुट सहेजकर रखें। अगर आपके पास टास्क ID है, तो उसकी पोलिंग करें। अन्यथा, मूल इनपुट उसी requestId के साथ दोबारा भेजें। केवल प्रोग्राम रीस्टार्ट करने से दूसरा ID जनरेट होता है और एक और शुल्क योग्य समाधान बन सकता है।

कॉलर अपनी समय-सीमा के बाद प्रतीक्षा बंद कर देता है; इससे पहले से बना टास्क रद्द नहीं होता। पूरी प्रक्रिया के लिए पोलिंग और टाइमआउट रिकवरी देखें।

अपना पहला टास्क चलाएँ।

$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।

वर्कस्पेस बनाएँ
C# से reCAPTCHA Enterprise हल करें · solvethree