معظم حالات فشل Cloudflare Turnstile ليست عشوائية. وهي تنقسم إلى ثلاث فئات: أخطاء مرحلة الطلب (تم رفض إرسالك إلى واجهة برمجة التطبيقات)، وأخطاء مرحلة النتيجة (فشل الاستقصاء أو انتهاء المهلة)، وفشل التحقق من صحة الصفحة المستهدفة (ترجع واجهة برمجة التطبيقات رمزًا مميزًا صالحًا ولكن الصفحة لا تزال ترفضه).
أكبر ثلاث مشاكل خاصة بTurnstile هي:
- عنوان URL الدقيق للصفحة غير صحيح — خاصةً على صفحات تحدي Cloudflare، حيث يكون السياق أكثر صرامة
- مفتاح موقع خاطئ — تم التقاطه من عنصر خاطئ أو من مثيل عنصر واجهة مستخدم مختلف
- تم تطبيق الرمز المميز عبر المسار الخاطئ — تتوقع الصفحة
cf-turnstile-responseأو رد اتصال أو كليهما
CaptchaAI يحل Turnstile بمعدل نجاح عالٍ في أقل من 10 ثواني. عندما يفشل التكامل، تكون المشكلة دائمًا تقريبًا في المعلمات التي ترسلها أو كيفية تطبيق الرمز المميز الذي تم إرجاعه.
نقاط الفشل الخاصة بTurnstile
قبل الغوص في رموز الخطأ، افهم الأشياء الثلاثة التي تجعل Turnstile مختلفًا عن أنواع captcha الأخرى:
1. عنوان URL الدقيق للصفحة أكثر أهمية
ترتبط رموز Turnstile بإحكام بسياق الصفحة. في صفحات تحدي Cloudflare (شاشة التحقق بملء الصفحة)، سيؤدي استخدام عنوان URL الخاطئ - حتى لو كان مسارًا مختلفًا قليلاً - إلى رفض الرمز المميز.
2. مساران لتطبيق الرمز المميز
يمكن تطبيق الرمز المميز الذي تم إرجاعه بطريقتين، وسيفشل استخدام الرمز الخاطئ بصمت:
| الطريقة | متى تستخدم |
|---|---|
حقل مخفي — أدخله في cf-turnstile-response (وأحيانًا g-recaptcha-response) |
عندما تستخدم الصفحة نموذجًا قياسيًا بمدخلات مخفية |
وظيفة رد الاتصال — استدعاء الوظيفة المحددة في turnstile.render() أو data-callback |
عندما تستخدم الصفحة التحقق البرمجي بدلاً من النموذج |
3. الرموز صالحة للاستخدام مرة واحدة
لا يمكن التحقق من رمز Turnstile إلا مرة واحدة. إذا قام التشغيل الآلي الخاص بك بإرساله مرتين عن طريق الخطأ، أو إذا كانت هناك حالة سباق، فستفشل المحاولة الثانية.
أخطاء مرحلة الطلب
يحدث هذا عند إرسال المهمة إلى https://ocr.captchaai.com/in.php.
ERROR_WRONG_USER_KEY
السبب: تنسيق مفتاح API غير صحيح (يجب أن يكون 32 حرفًا).
الإصلاح: التحقق من المفتاح منcaptchaai.com/api.php.
ERROR_KEY_DOES_NOT_EXIST
السبب: تم تنسيق المفتاح بشكل صحيح ولكنه غير مرتبط بحساب نشط.
الإصلاح: تحقق من لوحة المعلومات. تأكد من أن الحساب نشط وأن المفتاح صحيح.
ERROR_ZERO_BALANCE
السبب: لا توجد مواضيع مجانية في خطتك.
الإصلاح: انتظر حتى يتم تحرير سلاسل الرسائل أو تقليل التزامن أو الترقية.
ERROR_PAGEURL
السبب: المعلمة pageurl مفقودة.
الإصلاح: أضف عنوان URL الكامل — البروتوكول والمجال والمسار:
pageurl=https://example.com/login
ERROR_BAD_PARAMETERS
السبب: المعلمات المطلوبة مفقودة أو مشوهة. بالنسبة لـ Turnstile، المعلمات المطلوبة هي:
| المعلمة | النوع | مطلوب | الوصف |
|---|---|---|---|
key |
سلسلة | نعم | مفتاح CaptchaAI API الخاص بك |
method |
سلسلة | نعم | يجب أن يكون turnstile |
sitekey |
سلسلة | نعم | مفتاح الموقع عنصر Turnstile |
pageurl |
سلسلة | نعم | عنوان URL للصفحة الكاملة |
اختيارية ولكنها مفيدة:
| المعلمة | النوع | الوصف |
|---|---|---|
action |
سلسلة | قيمة data-action أو المعلمة action من turnstile.render() |
proxy |
سلسلة | التنسيق: login:password@IP:PORT |
proxytype |
سلسلة | HTTP، HTTPS، SOCKS4، SOCKS5 |
الإصلاح: التحقق من وجود جميع الحقول المطلوبة وكتابتها بشكل صحيح.
استجابات HTML أو 500/502
السبب: خطأ عابر من جانب الخادم.
الإصلاح: انتظر من 5 إلى 10 ثوانٍ ثم أعد المحاولة.
كيفية العثور على مفتاح الموقع Turnstile
مفتاح الموقع هو المعلمة الخاطئة الأكثر شيوعًا. هنا مكان العثور عليه:
الخيار 1 — سمة data-sitekey:
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAB1example"></div>
الخيار 2 — مكالمة turnstile.render():
turnstile.render('#captcha-container', {
sitekey: '0x4AAAAAAAB1example',
callback: function(token) {
document.getElementById('cf-turnstile-response').value = token;
}
});
الخيار 3 — اعتراض استدعاء العرض (متقدم):
إذا تم تحميل مفتاح الموقع ديناميكيًا، فيمكنك إعادة تعريف turnstile.render قبل تهيئة عنصر واجهة المستخدم لالتقاط المعلمات:
// Inject this before the Turnstile script loads
const originalRender = window.turnstile.render;
window.turnstile.render = function(container, params) {
console.log('Sitekey:', params.sitekey);
console.log('Action:', params.action);
return originalRender.call(this, container, params);
};
أخطاء مرحلة النتيجة
يحدث هذا عند الاقتراع على https://ocr.captchaai.com/res.php.
CAPCHA_NOT_READY
ليس خطأ. لا يزال الحل قيد التقدم. عادةً ما يستغرق حل Turnstile عند CaptchaAI أقل من 10 ثوانٍ.
الإصلاح: انتظر 5 ثوانٍ وقم بالاستطلاع مرة أخرى.
ERROR_WRONG_ID_FORMAT
السبب: يحتوي معرف captcha على أحرف غير رقمية.
الإصلاح: استخدم المعرف الدقيق الذي تم إرجاعه بواسطة in.php، بدون تعديل.
ERROR_WRONG_CAPTCHA_ID
السبب: المعرف لا يتطابق مع أي مهمة تم إرسالها.
الإصلاح: تأكد من قيامك باستقصاء المعرف الصحيح من استجابة الإرسال.
ERROR_EMPTY_ACTION
السبب: المعلمة action مفقودة في طلب الاستقصاء الخاص بك.
الإصلاح: قم دائمًا بتضمين action=get:
https://ocr.captchaai.com/res.php?key=YOUR_KEY&action=get&id=CAPTCHA_ID&json=1
ملاحظة: بالنسبة إلى Turnstile، استخدم دائمًا
json=1في طلب الاستطلاع الخاص بك. قد تتضمن استجابة JSONuser_agentالخاص بالحل، والذي تتطلبه بعض الصفحات المحمية بواسطة Cloudflare للتحقق من صحة الرمز المميز بنجاح.
ERROR_CAPTCHA_UNSOLVABLE
السبب: فشل الحل — ربما يكون مفتاح الموقع خاطئًا أو تكوين صفحة غير مدعوم.
الإصلاح: تحقق من مفتاح الموقع، ثم قم بتحديث الطلب، ثم أعد المحاولة.
ERROR_INTERNAL_SERVER_ERROR
السبب: مشكلة من جانب الخادم.
الإصلاح: انتظر 10 ثوانٍ ثم أعد المحاولة.
فشل التحقق من صحة الصفحة المستهدفة
هذه هي الأصعب في تصحيح الأخطاء لأن واجهة برمجة التطبيقات (API) تُرجع رمزًا مميزًا بنجاح، لكن الصفحة المستهدفة ترفضه.
الفشل 1: تم إدخال الرمز المميز في الحقل الخطأ
العَرَض: يتم إرسال النموذج ولكن الصفحة تعرض خطأً في التحقق من الصحة أو تقوم بالتحديث.
يمكن لصفحات Turnstile أن تتوقع الرمز المميز في مجالات مختلفة:
cf-turnstile-response- الإدخال المخفي الأساسي للباب الدوارg-recaptcha-response- تستخدم بعض الصفحات هذا كإجراء احتياطي
الإصلاح: التحقق من نموذج الصفحة لكلا الحقلين. في أتمتة المتصفح:
# Selenium — inject into both fields for safety
driver.execute_script("""
var cfField = document.querySelector('[name="cf-turnstile-response"]');
var gField = document.querySelector('[name="g-recaptcha-response"]');
if (cfField) cfField.value = arguments[0];
if (gField) gField.value = arguments[0];
""", token)
الفشل 2: لم يتم تشغيل رد الاتصال
العَرَض: الرمز المميز موجود في الحقل، لكن النموذج لا يزال يمنع الإرسال.
السبب: تستخدم الصفحة وظيفة رد اتصال بدلاً من (أو بالإضافة إلى) الحقل المخفي. يعالج رد الاتصال منطقًا إضافيًا مثل تمكين زر الإرسال أو إرسال طلب AJAX.
الإصلاح: البحث عن رد الاتصال والاتصال به:
// Check data-callback attribute
const callbackName = document.querySelector('.cf-turnstile').getAttribute('data-callback');
if (callbackName && window[callbackName]) {
window[callbackName](token);
}
// Or if it was passed in turnstile.render()
// You may need to intercept the render call to capture it
الفشل 3: سياق الصفحة الدقيق غير صحيح
العَرَض: تم رفض الرمز المميز على الرغم من مفتاح الموقع الصحيح والحل الجديد.
السبب: pageurl المستخدم في طلب API لا يتطابق مع السياق الفعلي للصفحة. وهذا شائع بشكل خاص في:
- صفحات تحدي Cloudflare — قد يتضمن عنوان URL معلمات استعلام أو مكونات مسار مهمة
- تطبيقات الصفحة الواحدة — قد يختلف عنوان URL المرئي عن عنوان URL الذي قام بتحميل عنصر واجهة المستخدم Turnstile
الإصلاح: استخدم علامة التبويب DevTools Network للعثور على عنوان URL الدقيق الذي يتم تحميل أداة Turnstile منه. استخدم عنوان URL هذا كـ pageurl.
الفشل 4: إعادة استخدام الرمز المميز
العَرَض: الحل الأول يعمل، والحلول اللاحقة تفشل.
السبب: الرموز المميزة للباب الدوار تستخدم لمرة واحدة. بمجرد التحقق من صحة الرمز المميز بواسطة خادم Cloudflare، يتم إبطاله.
الإصلاح: اطلب حلاً جديدًا لكل إرسال نموذج. لا تقم بتخزين الرموز المميزة أو إعادة استخدامها.
مرجع سريع للخطأ لإصلاحه
| خطأ / أعراض | المرحلة | السبب المحتمل | إصلاح |
|---|---|---|---|
ERROR_WRONG_USER_KEY |
إرسال | مفتاح API تالف | تحقق من مفتاح 32 حرفًا |
ERROR_KEY_DOES_NOT_EXIST |
إرسال | مفتاح غير صالح | تحقق من لوحة التحكم |
ERROR_ZERO_BALANCE |
إرسال | لا توجد مواضيع مجانية | انتظر أو قم بترقية الخطة |
ERROR_PAGEURL |
إرسال | pageurl مفقود |
أضف عنوان URL الكامل |
ERROR_BAD_PARAMETERS |
إرسال | مفتاح الموقع أو الطريقة أو عنوان URL للصفحة مفقود | التحقق من كافة الحقول المطلوبة |
CAPCHA_NOT_READY |
استطلاع | الحل قيد التقدم | انتظر 5 ثواني، أعد المحاولة |
ERROR_WRONG_ID_FORMAT |
استطلاع | معرف captcha غير رقمي | استخدم المعرف الدقيق من in.php |
ERROR_WRONG_CAPTCHA_ID |
استطلاع | معرف كلمة التحقق غير صالح | التحقق من معرف الإرسال |
ERROR_EMPTY_ACTION |
استطلاع | action=get مفقود |
إضافة معلمة الإجراء |
| تم رفض الرمز المميز حسب الصفحة | التحقق من الصحة | حقل خاطئ، لم يتم تشغيل رد الاتصال، عنوان URL خاطئ | تحقق من اسم الحقل، ثم رد الاتصال، ثم تحقق من عنوان URL الدقيق للصفحة |
| فشل الحل الثاني | التحقق من الصحة | إعادة استخدام الرمز المميز | طلب رمز جديد لكل إرسال |
بايثون: حل Turnstile الكامل
import time
import requests
API_KEY = "YOUR_CAPTCHAAI_API_KEY"
SITEKEY = "0x4AAAAAAAB1example"
PAGE_URL = "https://example.com/login"
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def solve_turnstile(api_key, sitekey, pageurl):
"""Submit a Turnstile challenge and return the solved token."""
# Submit
submit_resp = requests.post(
SUBMIT_URL,
data={
"key": api_key,
"method": "turnstile",
"sitekey": sitekey,
"pageurl": pageurl,
"json": 1,
},
timeout=30,
)
submit_resp.raise_for_status()
submit_data = submit_resp.json()
if submit_data.get("status") != 1:
raise RuntimeError(f"Submit failed: {submit_data}")
captcha_id = submit_data["request"]
print(f"Task created — captcha ID: {captcha_id}")
# Wait before first poll (Turnstile is fast — 10 seconds is usually enough)
time.sleep(10)
# Poll for result
for _ in range(60):
result_resp = requests.get(
RESULT_URL,
params={
"key": api_key,
"action": "get",
"id": captcha_id,
"json": 1,
},
timeout=30,
)
result_resp.raise_for_status()
result_data = result_resp.json()
if result_data.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if result_data.get("status") == 1:
return result_data["request"]
raise RuntimeError(f"Polling error: {result_data}")
raise TimeoutError("Turnstile solve timed out")
# Usage
token = solve_turnstile(API_KEY, SITEKEY, PAGE_URL)
print(f"Solved token: {token[:80]}...")
# Inject into cf-turnstile-response and/or g-recaptcha-response
# Then submit the form
Node.js: حل Turnstile بالكامل
const API_KEY = "YOUR_CAPTCHAAI_API_KEY";
const SITEKEY = "0x4AAAAAAAB1example";
const PAGE_URL = "https://example.com/login";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function solveTurnstile(apiKey, sitekey, pageurl) {
// Submit
const submitResp = await fetch(SUBMIT_URL, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: apiKey,
method: "turnstile",
sitekey: sitekey,
pageurl: pageurl,
json: "1",
}),
});
const submitData = await submitResp.json();
if (submitData.status !== 1) {
throw new Error(`Submit failed: ${JSON.stringify(submitData)}`);
}
const captchaId = submitData.request;
console.log(`Task created — captcha ID: ${captchaId}`);
// Turnstile is fast — wait 10 seconds before first poll
await sleep(10_000);
// Poll for result
for (let i = 0; i < 60; i++) {
const resultResp = await fetch(
`${RESULT_URL}?${new URLSearchParams({
key: apiKey,
action: "get",
id: captchaId,
json: "1",
})}`
);
const resultData = await resultResp.json();
if (resultData.request === "CAPCHA_NOT_READY") {
await sleep(5_000);
continue;
}
if (resultData.status === 1) {
return resultData.request;
}
throw new Error(`Polling error: ${JSON.stringify(resultData)}`);
}
throw new Error("Turnstile solve timed out");
}
// Usage
solveTurnstile(API_KEY, SITEKEY, PAGE_URL)
.then((token) => {
console.log(`Solved token: ${token.slice(0, 80)}...`);
// Inject into cf-turnstile-response and/or g-recaptcha-response
})
.catch(console.error);
Turnstile vs Cloudflare Challenge: ما الذي تواجهه؟
| إشارة | Turnstile | Cloudflare Challenge |
|---|---|---|
| ** ماذا ترى ** | عنصر واجهة مستخدم مضمن في الصفحة (مربع اختيار أو غير مرئي) | شاشة التحقق من Cloudflare بملء الصفحة |
| ما يعود به CaptchaAI | رمز لحقن في النموذج | ملف تعريف الارتباط cf_clearance |
| ** طريقة واجهة برمجة التطبيقات ** | turnstile |
cloudflare_challenge |
| الوكيل مطلوب؟ | اختياري | نعم (مطلوب) |
إذا كنت تواجه تحدي Cloudflare بصفحة كاملة (وليس عنصر واجهة مستخدم مضمن)، فأنت بحاجة إلىCloudflare Challenge بدلاً من ذلك، والذي يقوم بإرجاع ملف تعريف الارتباط cf_clearance ويتطلب وكيلاً.
الأسئلة الشائعة
لماذا يفشل Turnstile حتى عندما يبدو الطلب صحيحًا؟
الأسباب الثلاثة الأكثر شيوعًا: (1) خطأ pageurl قليلاً - خاصة على صفحات تحدي Cloudflare، (2) تم التقاط مفتاح الموقع من العنصر الخطأ، أو (3) يتم إدخال الرمز المميز في الحقل أو مسار رد الاتصال الخاطئ.
ما هو الخطأ الأكثر شيوعاً في Turnstile؟
استخدام عنوان URL الدقيق للصفحة الخاطئة. ترتبط الرموز المميزة للباب الدوار بإحكام بسياق الصفحة - حتى المسار المختلف أو معلمة الاستعلام المفقودة يمكن أن تسبب الرفض.
ماذا يعني CAPCHA_NOT_READY؟
الحل لا يزال قيد التقدم. انتظر 5 ثوان وقم بالاستطلاع مرة أخرى. عادةً ما يتم حل Turnstile في أقل من 10 ثوانٍ.
ماذا علي أن أفعل إذا قامت واجهة برمجة التطبيقات (API) بإرجاع رمز مميز ولكن الصفحة لا تزال ترفضه؟
- تحقق من أن
pageurlيطابق الصفحة الدقيقة التي يتم تحميل الأداة فيها. - تحقق مما إذا كانت الصفحة تتوقع الرمز المميز في
cf-turnstile-responseأوg-recaptcha-responseأو كليهما. - تحقق مما إذا كانت الصفحة تستخدم وظيفة رد اتصال بدلاً من (أو بالإضافة إلى) حقل مخفي.
- تأكد من استخدام الرمز المميز مرة واحدة فقط - الرموز المميزة للباب الدوار تستخدم لمرة واحدة.
هل يدعم CaptchaAI وكلاء Turnstile؟
نعم. أضف proxy وproxytype إلى طلبك. تعد الوكلاء اختيارية لعناصر واجهة المستخدم Turnstile المستقلة ولكن يوصى بها على صفحات تحدي Cloudflare.
ما هو الفرق بين Turnstile وCloudflare Challenge؟
Turnstile عبارة عن عنصر واجهة مستخدم مضمن يقوم بإرجاع رمز مميز. Cloudflare Challenge عبارة عن عملية تحقق على كامل الصفحة تقوم بإرجاع ملف تعريف الارتباط cf_clearance. إنهم يستخدمون أساليب API مختلفة وأنماط تكامل مختلفة، على الرغم من أن كلاهما من منتجات Cloudflare.
أصلح سير عمل Turnstile الخاص بك
إذا فشل تكامل Turnstile الخاص بك:
- التحقق من مفتاح الموقع — استخرجه من
data-sitekeyأوturnstile.render() - التحقق من عنوان URL للصفحة — استخدم عنوان URL الدقيق، بما في ذلك البروتوكول والمسار
- تحقق من مسار الرمز المميز — هل تستخدم الصفحة
cf-turnstile-responseأوg-recaptcha-responseأو رد اتصال؟ - استخدم
json=1— استخدم دائمًا استجابات JSON عند استطلاع نتائج Turnstile - لا تعيد استخدام الرموز المميزة — اطلب حلًا جديدًا لكل عملية إرسال
ابدأ بـ حل Turnstile من CaptchaAI، ثم تحقق من المعلمات الخاصة بك مقابل مستندات API، واقرأ كيف يعمل Cloudflare Turnstile إذا كنت بحاجة إلى خلفية عن آلية عمل العنصر.
سجل التكرار
| التكرار | التركيز | التغييرات |
|---|---|---|
| المسودة 1 | الهيكل والمحتوى | المسودة الأولية لاستكشاف الأخطاء وإصلاحها - 3 مراحل للخطأ، وجدول الأخطاء لإصلاحها، والأسئلة الشائعة |
| المسودة 2 | الدقة الفنية | تم التحقق من رموز الخطأ ومعلمات Turnstile ومسارات الرمز المميز مقابل captchaai.com/api-docs. تمت إضافة جداول المعلمات. تم تأكيد method=turnstile وكلا الحقلين cf-turnstile-response / g-recaptcha-response. |
| المسودة 3 | الكود وعمق الحقن | تمت إضافة Python وNode.js لحل الأمثلة. تمت إضافة طرق استخراج مفتاح الموقع (3 طرق). تمت إضافة رمز حقن السيلينيوم لكلا حقلي الرمز المميز. تمت إضافة رمز الكشف عن رد الاتصال. |
| المسودة 4 | محتوى التمايز | تمت إضافة جدول مقارنة Turnstile و Cloudflare Challenge. تمت إضافة ملاحظة متطلبات json=1 لـ user_agent. تمت إضافة تقنية اعتراض العرض لمفاتيح الموقع الديناميكية. |
| المسودة 5 | تلميع ضمان الجودة النهائي | تم التحقق من تطابق جميع رموز الخطأ مع المستندات الرسمية. تمت إضافة جدول مرجعي سريع. تشديد المقدمة. تمت إضافة تحذير رمزي للاستخدام مرة واحدة. تم تأكيد الروابط المتبادلة لمقالات المجموعة. إجابات الأسئلة الشائعة جاهزة للمخطط. |
ملخص الأصول المرئية
صورة البطل
- نص بديل: استكشاف أخطاء المطورين وإصلاحها في أخطاء Cloudflare Turnstile - تدفق الطلب، وإدخال الرمز المميز، وفشل التحقق من الصحة
- يجب إظهار: سير عملية استكشاف الأخطاء وإصلاحها الفنية مع مراحل الخطأ ومسارات الإصلاح
- اسم الملف: cloudflare-turnstile-errors-troubleshooting-hero.png
في المادة البصرية 1
- الموضع: بعد "أخطاء مرحلة النتيجة"
- النوع: شجرة القرار
- نص بديل: شجرة القرار لحالات فشل Cloudflare Turnstile — أخطاء الطلب مقابل أخطاء الاستقصاء مقابل رفض الصفحة
- اسم الملف: cloudflare-turnstile-error-decision-tree.png
في المادة البصرية 2
- الموضع: بعد "فشل التحقق من صحة الصفحة المستهدفة"
- النوع: مخطط الأسباب والحلول
- نص بديل: رسم تخطيطي يوضح سبب رفض رموز Turnstile والإصلاح لكل سبب
- اسم الملف: cloudflare-turnstile-validation-causes-fixes.png
مقالات ذات صلة
- Cloudflare Challenge مقابل اكتشاف Turnstile
- مقارنة Geetest وCloudflare Turnstile
- Cloudflare Turnstile 403 بعد إصلاح الرمز المميز