حل reCAPTCHA Enterprise باستخدام PHP
يمكنك استدعاء solvethree مباشرةً من PHP. يطلب المثال أدناه رمز reCAPTCHA v3 Enterprise، ويتابع المهمة حتى اكتمالها، ويتوقف عند فشل الحل.
في هذه الصفحة
قبل التشغيل
استخدم PHP 8+ مع امتداد cURL. شغّله على خادمك مع تفعيل امتداد cURL.
- أنشئ ملف موقع تعريفيًا نشطًا لاسم المضيف المستهدف في لوحة التحكم. راجع إعداد ملف الموقع التعريفي.
- اضبط
SOLVETHREE_API_KEYعلى مفتاح API لمساحة عملك، وSOLVETHREE_PROXYعلى عنوان URL لوكيل HTTP(S) لديك. - استبدل
accounts.example.comوloginباسم المضيف لديك والإجراء الذي تستخدمه الصفحة. استخدم اسم مضيف فيsite، دون مخطط أو مسار.
أنشئ المهمة وانتظر النتيجة
احفظ الكود باسم solve.php وشغّل php solve.php.
<?php
// Requires PHP 8+ with the cURL extension.
$apiKey = getenv('SOLVETHREE_API_KEY');
$proxy = getenv('SOLVETHREE_PROXY');
if (!$apiKey || !$proxy) throw new RuntimeException('Set the API key and proxy');
function api(string $path, ?array $body = null): array {
global $apiKey, $deadline;
$remaining = $deadline - microtime(true);
if ($remaining <= 0) throw new RuntimeException("Keep the task ID and resume polling");
$curl = curl_init('https://api.solvethree.com/v1' . $path);
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT_MS => min(30000, max(1, (int) ceil($remaining * 1000))),
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey, 'Content-Type: application/json'],
]);
if ($body !== null) {
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($body, JSON_THROW_ON_ERROR));
}
$raw = curl_exec($curl);
$error = curl_error($curl);
$status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
curl_close($curl);
if ($raw === false) throw new RuntimeException('Connection failed: ' . $error);
if ($status < 200 || $status >= 300) throw new RuntimeException('API HTTP ' . $status);
return json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
}
$requestId = bin2hex(random_bytes(16)); // Save this with the task inputs for recovery.
$deadline = microtime(true) + 180;
$task = api('/tasks?waitMs=0', [
'site' => 'accounts.example.com', 'action' => 'login',
'proxy' => $proxy, 'requestId' => $requestId,
]);
while (in_array($task['status'], ['pending', 'solving'], true)) {
if (microtime(true) >= $deadline) throw new RuntimeException('Keep the task ID and resume polling');
$task = api('/tasks/' . rawurlencode($task['id']) . '?waitMs=15000');
if (in_array($task['status'], ['pending', 'solving'], true)) usleep(1000000);
}
if ($task['status'] !== 'ready') throw new RuntimeException(
($task['errorCode'] ?? 'Unexpected task state') . ': ' . ($task['error'] ?? '')
);
$solution = $task['solution'];
// Use $solution['token'], ['userAgent'] and ['secChUa'] with the same proxy.
echo 'Ready task: ' . $task['id'] . PHP_EOL;يستخدم طلب POST القيمة waitMs=0 لإرجاع مهمة فورًا. بعد ذلك، ينتظر كل طلب GET مدة تصل إلى 15 ثانية للحصول على تحديث. تستمر الحلقة عند pending أو solving، وتتوقف عند ready أو failed.
يستخدم الطلب Enterprise v3 افتراضيًا. لاستخدام v3 القياسي، أضف recaptchaType: v3. لا تُدرج type وurl في جسم مهمة reCAPTCHA.
استخدم الرمز في تطبيقك
الرمز هو $solution['token']. معرّف المهمة الذي يطبعه البرنامج مخصّص لاسترجاع المهمة؛ استخدم قيمة الرمز في حقل CAPTCHA بتطبيقك.
استخدم $solution['userAgent'] لقيمة User-Agent و$solution['secChUa'] لقيمة sec-ch-ua في الطلب المستهدف.
أرسل ذلك الطلب عبر الوكيل نفسه المستخدم للحل. ثم تحقّق من استجابة التطبيق: إنشاء الرمز لا يثبت أن الجهة المستهدفة قبلت الطلب.
إذا فشل الطلب
تتضمن المهمة الفاشلة errorCode وerror؛ ويتوقف المثال ويعرضهما. تُردّ تكلفة عمليات الحل الفاشلة. أما خطأ HTTP مثل 401 أو 402 فهو مشكلة منفصلة في الطلب؛ راجع مرجع أخطاء API قبل إعادة المحاولة.
احتفظ بـ requestId ومدخلات المهمة كما هي تمامًا إذا احتجت إلى الاستعادة بعد انتهاء المهلة أو إعادة تشغيل العملية. إذا كان لديك معرّف المهمة، فاستطلع حالتها. وإلا، فأعد إرسال المدخلات الأصلية باستخدام requestId نفسه. مجرد إعادة تشغيل البرنامج يولّد معرّفًا آخر وقد ينشئ عملية حل أخرى تُحتسب تكلفتها.
يتوقف الطرف المستدعي عن الانتظار بعد انقضاء مهلته؛ لكن ذلك لا يلغي مهمة أُنشئت بالفعل. راجع الاستطلاع والاستعادة بعد انتهاء المهلة للاطلاع على التسلسل الكامل.
المصادر ومرجع API
شغّل مهمتك الأولى.
ابدأ برصيد قدره $5 في مساحة العمل.