إذا كنت تقيّم الانتقال إلى CaptchaAI، فالسؤال العملي الوحيد هو: كم سطراً من تكاملك الحالي سيتغير فعلاً؟ الإجابة تعتمد على المزوّد الذي تتركه. يتبع CaptchaAI بنية 2Captcha نفسها — نقطتا in.php وres.php ومعلمات على شكل نموذج — لذا الانتقال من 2Captcha لا يحتاج سوى تبديل النطاق. أما القادمون من Anti-Captcha أو CapMonster Cloud فيحتاجون إلى تحويل جسم JSON إلى معلمات نموذج وإعادة تسمية بعض الحقول. هذا المرجع يضع الحقول والاستجابات ورموز الأخطاء جنباً إلى جنب، حتى تعرف بالضبط ما الذي يتغير قبل أن تكتب سطراً واحداً.
يمكنك تلخيص حجم العمل بثلاث حالات:
- قادم من 2Captcha: بدّل النطاق وحدّث المفتاح — التوافق شبه كامل.
- قادم من Anti-Captcha أو CapMonster: حوّل جسم JSON إلى معلمات نموذج وأعد ربط أسماء الحقول.
- بناء تكامل جديد: اتبع أسلوب النموذج المسطّح مباشرةً على
in.phpوres.php.
نقاط النهاية الأساسية لكل مزوّد
| المزوّد | نقطة نهاية الإرسال | نقطة نهاية النتيجة |
|---|---|---|
| CaptchaAI | https://ocr.captchaai.com/in.php |
https://ocr.captchaai.com/res.php |
| 2Captcha | https://2captcha.com/in.php |
https://2captcha.com/res.php |
| Anti-Captcha | https://api.anti-captcha.com/createTask |
https://api.anti-captcha.com/getTaskResult |
| CapMonster Cloud | https://api.capmonster.cloud/createTask |
https://api.capmonster.cloud/getTaskResult |
يستخدم CaptchaAI البنية ذاتها التي يعتمدها 2Captcha: مسار للإرسال ومسار لاستطلاع النتيجة. عملياً يعني هذا أن الترحيل من 2Captcha يقتصر على تبديل اسم النطاق، بينما تفصل عائلة Anti-Captcha وCapMonster مساراتٍ مختلفة لكل عملية.
نمط الـ API والمصادقة
| المزوّد | نمط الـ API | نوع المحتوى | المصادقة |
|---|---|---|---|
| CaptchaAI | معلمات نموذج/استعلام | application/x-www-form-urlencoded |
معلمة key |
| 2Captcha | معلمات نموذج/استعلام | application/x-www-form-urlencoded |
معلمة key |
| Anti-Captcha | جسم JSON | application/json |
clientKey داخل الجسم |
| CapMonster Cloud | جسم JSON | application/json |
clientKey داخل الجسم |
الفارق الجوهري بين العائلتين ليس في القدرات بل في شكل الطلب:
- عائلة CaptchaAI و2Captcha: معلمات نموذج مسطّحة، ومفتاح واحد باسم
keyللمصادقة. - عائلة Anti-Captcha وCapMonster: كائن JSON متداخل، وبيانات الاعتماد في
clientKey.
معظم التغييرات التي ستكتبها أثناء الترحيل تنبع من هذا الاختلاف وحده.
reCAPTCHA v2
CaptchaAI و2Captcha — معلمات نموذج إلى in.php:
POST /in.php
key=API_KEY
method=userrecaptcha
googlekey=SITE_KEY
pageurl=PAGE_URL
json=1
Anti-Captcha وCapMonster — جسم JSON إلى createTask:
POST /createTask
{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
جدول تعيين الحقول
| CaptchaAI | Anti-Captcha/CapMonster | الوصف |
|---|---|---|
key |
clientKey |
مفتاح الـ API |
method=userrecaptcha |
type=RecaptchaV2TaskProxyless |
نوع المهمة |
googlekey |
websiteKey |
مفتاح موقع reCAPTCHA |
pageurl |
websiteURL |
عنوان URL للصفحة المستهدفة |
invisible=1 |
isInvisible: true |
reCAPTCHA غير المرئي |
enterprise=1 |
type=RecaptchaV2EnterpriseTaskProxyless |
علامة الإصدار Enterprise |
| ## reCAPTCHA v3 |
CaptchaAI و2Captcha — يُضاف version وaction إلى الطلب نفسه:
POST /in.php
key=API_KEY
method=userrecaptcha
googlekey=SITE_KEY
pageurl=PAGE_URL
version=v3
action=verify
Anti-Captcha وCapMonster — نوع مهمة مستقل مع pageAction:
{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY",
"pageAction": "verify"
}
}
Cloudflare Turnstile
CaptchaAI — تمرَّر قيمة مفتاح الموقع في sitekey:
POST /in.php
key=API_KEY
method=turnstile
sitekey=SITE_KEY
pageurl=PAGE_URL
Anti-Captcha — نوع مهمة TurnstileTaskProxyless:
{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
يدعم CaptchaAI حل Cloudflare Turnstile مباشرةً عبر method=turnstile، مع تمرير مفتاح الموقع في sitekey بدلاً من googlekey الخاص بـ reCAPTCHA.
hCaptcha
لا يحل CaptchaAI اختبار hCaptcha حتى الآن، كما لا يدعم FunCaptcha من Arkose Labs، ودعم GeeTest v4 لا يزال قيد الإعداد ولم يُطرح بعد. أدرجنا شكل الطلب لدى 2Captcha وAnti-Captcha هنا كمرجع لمن يوازن بين المزوّدين لهذا النوع تحديداً؛ فإن كان hCaptcha شرطاً أساسياً في مشروعك فخطّط لإبقائه على مزوّده الحالي إلى حين توفّره.
2Captcha — معلمات نموذج إلى in.php:
POST /in.php
key=API_KEY
method=hcaptcha
sitekey=SITE_KEY
pageurl=PAGE_URL
Anti-Captcha — نوع مهمة HCaptchaTaskProxyless:
{
"clientKey": "API_KEY",
"task": {
"type": "HCaptchaTaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
GeeTest v3
CaptchaAI و2Captcha — تُمرَّر قيمتا gt وchallenge معاً:
POST /in.php
key=API_KEY
method=geetest
gt=GT_VALUE
challenge=CHALLENGE_VALUE
pageurl=PAGE_URL
Anti-Captcha — نوع مهمة GeeTestTaskProxyless:
{
"clientKey": "API_KEY",
"task": {
"type": "GeeTestTaskProxyless",
"websiteURL": "PAGE_URL",
"gt": "GT_VALUE",
"challenge": "CHALLENGE_VALUE"
}
}
اختبارات الصور (OCR)
CaptchaAI و2Captcha — الصورة مشفّرة بصيغة base64 في body:
POST /in.php
key=API_KEY
method=base64
body=BASE64_IMAGE
Anti-Captcha — نوع مهمة ImageToTextTask:
{
"clientKey": "API_KEY",
"task": {
"type": "ImageToTextTask",
"body": "BASE64_IMAGE"
}
}
استطلاع النتيجة
CaptchaAI و2Captcha — طلب GET بسيط لاستطلاع النتيجة:
GET /res.php?key=API_KEY&action=get&id=TASK_ID&json=1
Response: {"status":1,"request":"TOKEN"}
Not ready: {"status":0,"request":"CAPCHA_NOT_READY"}
Anti-Captcha وCapMonster — طلب POST مع جسم JSON:
POST /getTaskResult
{
"clientKey": "API_KEY",
"taskId": 123456
}
Response: {"status":"ready","solution":{"gRecaptchaResponse":"TOKEN"}}
Not ready: {"status":"processing"}
هنا فرق مهم يسهل تجاهله: يعتمد CaptchaAI على GET بسيط، بينما تتطلب عائلة Anti-Captcha POST مع جسم JSON. عند القدوم من Anti-Captcha عدّل حلقة الاستطلاع الدوري لتستخدم GET مع مُعرّف المهمة، وتعامل مع CAPCHA_NOT_READY كإشارة على أن الحل لم يكتمل بعد.
التحقق من الرصيد
| المزوّد | نقطة النهاية | الاستجابة |
|---|---|---|
| CaptchaAI | GET /res.php?key=KEY&action=getbalance |
12.345 |
| 2Captcha | GET /res.php?key=KEY&action=getbalance |
12.345 |
| Anti-Captcha | POST /getBalance {"clientKey":"KEY"} |
{"balance":12.345} |
| CapMonster | POST /getBalance {"clientKey":"KEY"} |
{"balance":12.345} |
يعيد CaptchaAI الرصيد كرقم مجرّد مطابق لأسلوب 2Captcha، بينما تغلّفه عائلة Anti-Captcha في كائن JSON بحقل balance. الكود الذي يقرأ الرصيد رقماً مباشراً لن يحتاج تعديلاً عند القدوم من 2Captcha.
رموز الأخطاء المتقابلة
| السيناريو | CaptchaAI / 2Captcha | Anti-Captcha |
|---|---|---|
| مفتاح API خاطئ | ERROR_WRONG_USER_KEY |
ERROR_KEY_DOES_NOT_EXIST |
| رصيد صفر | ERROR_ZERO_BALANCE |
ERROR_ZERO_BALANCE |
| مفتاح موقع غير صالح | ERROR_WRONG_GOOGLEKEY |
ERROR_RECAPTCHA_INVALID_SITEKEY |
| النتيجة غير جاهزة | CAPCHA_NOT_READY |
status: "processing" |
| تجاوز حد الطلبات | ERROR_TOO_MUCH_REQUESTS |
ERROR_TOO_MUCH_REQUESTS |
رموز أخطاء CaptchaAI مطابقة لرموز 2Captcha نصاً، لذا تبقى معالجة الأخطاء التي كتبتها لـ 2Captcha صالحة كما هي. عند الترحيل من Anti-Captcha اربط رموزها المكافئة لتفادي معالجة الخطأ نفسه بمنطقين مختلفين.
قائمة تحقق للترحيل
راجع الخطوات التالية قبل تحويل حركة الإنتاج بالكامل؛ ترتيبها يقلّل مفاجآت اللحظة الأخيرة:
- [ ] بدّل عنوان URL الأساسي إلى
ocr.captchaai.com - [ ] حدّث مفتاح الـ API
- [ ] عند الترحيل من Anti-Captcha أو CapMonster: حوّل جسم JSON إلى معلمات نموذج
- [ ] استبدل
clientKeyبـkey - [ ] استبدل
typeالخاص بالمهمة بـmethod - [ ] عدّل الاستطلاع الدوري ليستخدم GET بدلاً من POST (عند القدوم من Anti-Captcha)
- [ ] اختبر بمهمة واحدة قبل الترحيل الكامل
سيناريو عملي من السوق
تخيّل فريقاً يدير أداة استخراج بيانات لموقع تجارة إلكترونية إقليمي تعتمد على 2Captcha عبر مكتبة عميل شائعة. مسار الترحيل هنا قصير:
- اضبط عنوان URL الأساسي في المكتبة على
https://ocr.captchaai.com. - حدّث المفتاح، ثم شغّل مهمة reCAPTCHA v2 واحدة وتأكد من عودة التوكن.
- حوّل بقية الحمل تدريجياً بعد نجاح الاختبار.
أما لو كان المصدر Anti-Captcha، فالخطوة الإضافية الوحيدة هي إعادة صياغة الطلب من JSON إلى معلمات نموذج وتحويل حلقة الاستطلاع إلى GET.
الأسئلة الشائعة
ما التغييرات المطلوبة عند الانتقال من Anti-Captcha إلى CaptchaAI؟
ثلاثة تغييرات جوهرية: حوّل جسم JSON إلى معلمات نموذج مسطّحة، واستبدل clientKey بـ key وtype بـ method، وحوّل استطلاع النتيجة من POST /getTaskResult إلى GET /res.php. بعدها تصبح أسماء الحقول متوافقة مع أسلوب 2Captcha.
ماذا عن hCaptcha وFunCaptcha وGeeTest v4؟
هذه الأنواع غير متاحة حالياً في CaptchaAI؛ فـ hCaptcha وFunCaptcha من Arkose Labs غير مدعومَين، ودعم GeeTest v4 قيد الإعداد ولم يُطرح بعد. في المقابل تُحل reCAPTCHA v2/v3 وCloudflare Turnstile وChallenge وGeeTest v3 واختبارات الصور بشكل عام.
كيف أتحقق من الرصيد وأتعامل مع رموز الأخطاء بعد الترحيل؟
استخدم GET /res.php?key=KEY&action=getbalance للحصول على الرصيد رقماً مباشراً. رموز الأخطاء مطابقة لـ 2Captcha نصاً، لذا تعمل معالجتك القائمة دون تعديل؛ وعند القدوم من Anti-Captcha اربط رموزها المكافئة كما في الجدول أعلاه.
هل يمكنني اختبار الترحيل دون تعطيل الإنتاج؟
نعم، وهذا هو النهج الموصى به. شغّل مهمة واحدة عبر نقطة نهاية CaptchaAI وتحقق من عودة التوكن ومن قراءة الرصيد بشكل صحيح، ثم حوّل نسبة صغيرة من الحركة قبل الترحيل الكامل.
انتقل إلى CaptchaAI بأقل تغييرات في الكود
أنشئ حسابك واحصل على مفتاح الـ API من captchaai.com، ثم بدّل النطاق في تكاملك الحالي وشغّل مهمة اختبارية واحدة للتأكد.