ASP.NET Core बैकएंड से solvethree को कॉल करें
टाइप किया गया HttpClient रजिस्टर करें, टास्क एक बार बनाएँ, फिर एक निश्चित समय-सीमा के भीतर उसका स्टेटस प्राप्त करें। API की सर्वर पर रखें और क्लाइंट को कॉल करने वाले सभी एप्लिकेशन रूट सुरक्षित करें।
नीचे दिया गया उदाहरण reCAPTCHA Enterprise के लिए एक REST हेल्पर है, आधिकारिक C# SDK नहीं। यह टास्क बनाने और प्राप्त करने को अलग रखता है, ताकि आपके एप्लिकेशन को सॉल्व पूरा होने तक एक आने वाला अनुरोध खुला न रखना पड़े।
इस पेज पर
टाइप किया गया क्लाइंट रजिस्टर करें
सबसे पहले, कंसोल में अपने वर्कस्पेस के लिए लक्ष्य साइट की प्रोफ़ाइल सक्रिय करें। होस्टनेम और एक्शन भेजने से प्रोफ़ाइल नहीं बनेगी। यदि साइट अभी कॉन्फ़िगर नहीं है, तो साइट प्रोफ़ाइल सेटअप देखें।
वर्कस्पेस की को सर्वर कॉन्फ़िगरेशन में SOLVETHREE_API_KEY के रूप में रखें। क्लाइंट क्लास जोड़ें, फिर Program.cs के अंतर्गत दिखाए गए रजिस्ट्रेशन को अनकमेंट करें और उसे builder.Build() से पहले रखें।
// CaptchaClient.cs; .NET 8+, System.Net.Http.Json and System.Text.Json.Nodes.
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text.Json.Nodes;
public sealed class CaptchaClient(HttpClient http)
{
public async Task<JsonObject> CreateAsync(string site, string proxy, string requestId,
CancellationToken cancellationToken)
{
using var response = await http.PostAsJsonAsync("tasks?waitMs=0",
new { site, action = "login", proxy, requestId }, cancellationToken);
response.EnsureSuccessStatusCode();
return (await response.Content.ReadFromJsonAsync<JsonObject>(cancellationToken))!;
}
public async Task<JsonObject> GetAsync(string id, CancellationToken cancellationToken)
{
using var response = await http.GetAsync("tasks/" + Uri.EscapeDataString(id) + "?waitMs=15000",
cancellationToken);
response.EnsureSuccessStatusCode();
return (await response.Content.ReadFromJsonAsync<JsonObject>(cancellationToken))!;
}
}
// Program.cs, before builder.Build(), in an existing authenticated ASP.NET app:
// builder.Services.AddHttpClient<CaptchaClient>(http => {
// http.BaseAddress = new Uri("https://api.solvethree.com/v1/");
// http.Timeout = TimeSpan.FromSeconds(25);
// http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
// "Bearer", builder.Configuration["SOLVETHREE_API_KEY"]
// ?? throw new InvalidOperationException("Missing API key"));
// }).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler {
// AllowAutoRedirect = false
// });
// Inject CaptchaClient into your authenticated controller/service. Pass its
// cancellation token, create once, save id and poll GetAsync with a finite deadline.रजिस्ट्रेशन API बेस एड्रेस, Bearer प्रमाणीकरण और 25 सेकंड का ट्रांसपोर्ट टाइमआउट सेट करता है, और ऑटोमैटिक रीडायरेक्ट बंद करता है। बेस एड्रेस के अंत में स्लैश बनाए रखें: क्लाइंट के रिलेटिव tasks पाथ /v1/ के अंतर्गत रिज़ॉल्व होने चाहिए।
हेल्पर HttpClient के JSON एक्सटेंशन का उपयोग करता है और एक JsonObject लौटाता है। दोनों मेथड डीसीरियलाइज़ करने से पहले HTTP सफलता की जाँच करते हैं। CaptchaClient को किसी प्रमाणित कंट्रोलर या सर्विस में इंजेक्ट करें; हेल्पर स्वयं आपके एप्लिकेशन के कॉलर का प्रमाणीकरण या प्राधिकरण नहीं करता।
एक बार बनाएँ और रिकवरी की जानकारी सहेजें
- 1.
साइट, एक्शन और प्रॉक्सी चुनें
site के रूप में लक्ष्य होस्टनेम पास करें, पूरा URL नहीं। यह उदाहरण action को login पर स्थिर रखता है; इसे लक्ष्य द्वारा अपेक्षित एक्शन में बदलें। यह एक प्रॉक्सी भेजता है और डिफ़ॉल्ट enterprise-v3 reCAPTCHA मोड पर निर्भर करता है। type या url फ़ील्ड न जोड़ें।
- 2.
CreateAsync कॉल करने से पहले requestId सहेजें
1–64 ASCII अक्षर, अंक, अंडरस्कोर या हाइफ़न का उपयोग करें। इसे हूबहू टास्क इनपुट के साथ सहेजें, ताकि रिस्पॉन्स खो जाने पर आप वही तार्किक टास्क फिर प्राप्त कर सकें।
- 3.
CreateAsync कॉल करें और लौटाई गई टास्क ID सहेजें
CreateAsync, waitMs=0 के साथ एक POST करता है। कॉलर का CancellationToken पास करें। टास्क ID मिलने के बाद, दूसरा टास्क बनाने के बजाय उसी टास्क को प्राप्त करने के लिए GetAsync का उपयोग करें।
वर्कस्पेस क्रेडिट खर्च करने की अनुमति अपने एप्लिकेशन की प्राधिकरण जाँचों के अधीन रखें। यदि ये मान किसी आने वाले अनुरोध से मिलते हैं, तो जाँचें कि अनुरोधित साइट, एक्शन और प्रॉक्सी का उपयोग करने की अनुमति उस कॉलर को है।
कुल समय-सीमा के साथ पोल करें
GetAsync ज्ञात टास्क ID को एस्केप करता है और waitMs=15000 का अनुरोध करता है। 25 सेकंड का HttpClient टाइमआउट हर HTTP अनुरोध को सीमित करता है; यह आपके एप्लिकेशन की पोलिंग में लगने वाले कुल समय को सीमित नहीं करता। अलग कुल समय-सीमा सेट करें और हर कॉल में कैंसलेशन पास करें।
pendingयाsolving: केवल तब तक जारी रखें, जब तक पोलिंग की समय-सीमा और कॉलर का कैंसलेशन इसकी अनुमति दें।ready: पोलिंग रोकें और सॉल्यूशन पढ़ें। केवल इसी स्टेटस में उपयोग योग्य सॉल्यूशन होता है।failed: पोलिंग रोकें औरerrorCodeवerrorदेखें।
ब्राउज़र से उपयोग किए जाने वाले एप्लिकेशन में, टास्क पूरा होने तक एक ही आने वाले अनुरोध के भीतर लूप चलाने के बजाय, टास्क बनाने और बाद में स्टेटस जाँचने को अलग, सुरक्षित ऑपरेशन रखें। स्थानीय समय-सीमा समाप्त होने पर टास्क ID बनाए रखें, ताकि बाद का कोई अधिकृत अनुरोध उसे प्राप्त कर सके।
टोकन को उसके इच्छित लक्ष्य पर भेजते समय, सॉल्यूशन में लौटाई गई userAgent और secChUa पहचान तथा सॉल्व के लिए इस्तेमाल की गई वही प्रॉक्सी उपयोग करें। तैयार टास्क का अर्थ है कि सॉल्यूशन जनरेट हो गया—यह नहीं कि आपके एप्लिकेशन का अनुरोध सफल हुआ।
डुप्लिकेट काम बनाए बिना टाइमआउट से रिकवर करें
- ID मिलने से पहले CreateAsync का टाइमआउट हो जाता है या उसे रद्द कर दिया जाता है।
हो सकता है कि सर्वर पहले ही टास्क बना चुका हो। स्थानीय कैंसलेशन रिमोट काम को रद्द नहीं करता।
यह आज़माएँ: सहेजे गए requestId के साथ वही टास्क इनपुट फिर भेजकर रिकवर करें। समान ID और इनपुट मौजूदा टास्क लौटाते हैं; उसी ID का पुनः उपयोग करते हुए इनपुट बदलने पर कॉन्फ़्लिक्ट होता है।
- GetAsync का टाइमआउट हो जाता है या पोलिंग की समय-सीमा समाप्त हो जाती है।
आपके पास पहले से टास्क ID है, इसलिए रिस्पॉन्स न मिलने पर उसकी जगह नया टास्क बनाने की ज़रूरत नहीं है।
यह आज़माएँ: ID बनाए रखें और बाद में नई समय-सीमित कार्रवाई के भीतर वही टास्क प्राप्त करें।
- HTTP कॉल असफल रिस्पॉन्स लौटाती है।
हेल्पर के सफलता पेलोड पढ़ने से पहले EnsureSuccessStatusCode एक्सेप्शन थ्रो करता है। यह ऐसा टास्क मिलने से अलग है जिसका स्टेटस failed हो।
यह आज़माएँ: HTTP त्रुटि को अलग संभालें। अमान्य इनपुट को बिना बदले दोबारा भेजने के बजाय उन्हें सुधारें।
- टास्क की स्थिति failed हो जाती है।
टास्क की विफलता, जैसे site-unreachable, के लिए errorCode और error पढ़ें।
यह आज़माएँ: उस टास्क की पोलिंग रोकें और दूसरा सॉल्व शुरू करने से पहले बताए गए कारण को दूर करें।
जब आपको अस्वीकृत API अनुरोध और अंतिम सॉल्व विफलता में अंतर समझना हो, तो API त्रुटि गाइड का उपयोग करें।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।