حل reCAPTCHA Enterprise باستخدام C#
يمكنك استدعاء solvethree مباشرةً من C#. يطلب المثال أدناه رمز reCAPTCHA v3 Enterprise، ويتابع المهمة حتى اكتمالها، ويتوقف عند فشل الحل.
في هذه الصفحة
قبل التشغيل
استخدم .NET 8+. لا حاجة إلى حزم NuGet إضافية.
- أنشئ ملف موقع تعريفيًا نشطًا لاسم المضيف المستهدف في لوحة التحكم. راجع إعداد ملف الموقع التعريفي.
- اضبط
SOLVETHREE_API_KEYعلى مفتاح API لمساحة عملك، وSOLVETHREE_PROXYعلى عنوان URL لوكيل HTTP(S) لديك. - استبدل
accounts.example.comوloginباسم المضيف لديك والإجراء الذي تستخدمه الصفحة. استخدم اسم مضيف فيsite، دون مخطط أو مسار.
أنشئ المهمة وانتظر النتيجة
أنشئ مشروع تطبيق طرفية في .NET باستخدام dotnet new console، واستبدل محتوى Program.cs بهذا الكود، ثم شغّل dotnet run.
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. لا تُدرج type وurl في جسم مهمة reCAPTCHA.
استخدم الرمز في تطبيقك
الرمز هو solution["token"]!.GetValue<string>(). معرّف المهمة الذي يطبعه البرنامج مخصّص لاسترجاع المهمة؛ استخدم قيمة الرمز في حقل CAPTCHA بتطبيقك.
اقرأ solution["userAgent"] وsolution["secChUa"] لاستخدامهما في ترويستَي User-Agent وsec-ch-ua للطلب المستهدف.
أرسل ذلك الطلب عبر الوكيل نفسه المستخدم للحل. ثم تحقّق من استجابة التطبيق: إنشاء الرمز لا يثبت أن الجهة المستهدفة قبلت الطلب.
إذا فشل الطلب
تتضمن المهمة الفاشلة errorCode وerror؛ ويتوقف المثال ويعرضهما. تُردّ تكلفة عمليات الحل الفاشلة. أما خطأ HTTP مثل 401 أو 402 فهو مشكلة منفصلة في الطلب؛ راجع مرجع أخطاء API قبل إعادة المحاولة.
احتفظ بـ requestId ومدخلات المهمة كما هي تمامًا إذا احتجت إلى الاستعادة بعد انتهاء المهلة أو إعادة تشغيل العملية. إذا كان لديك معرّف المهمة، فاستطلع حالتها. وإلا، فأعد إرسال المدخلات الأصلية باستخدام requestId نفسه. مجرد إعادة تشغيل البرنامج يولّد معرّفًا آخر وقد ينشئ عملية حل أخرى تُحتسب تكلفتها.
يتوقف الطرف المستدعي عن الانتظار بعد انقضاء مهلته؛ لكن ذلك لا يلغي مهمة أُنشئت بالفعل. راجع الاستطلاع والاستعادة بعد انتهاء المهلة للاطلاع على التسلسل الكامل.
المصادر ومرجع API
شغّل مهمتك الأولى.
ابدأ برصيد قدره $5 في مساحة العمل.