استكشاف الأخطاء

أخطاء Cloudflare Turnstile واستكشاف الأخطاء وإصلاحها

معظم حالات فشل Cloudflare Turnstile ليست عشوائية. وهي تنقسم إلى ثلاث فئات: أخطاء مرحلة الطلب (تم رفض إرسالك إلى واجهة برمجة التطبيقات)، وأخطاء مرحلة النتيجة (فشل الاستقصاء أو انتهاء المهلة)، وفشل التحقق من صحة الصفحة المستهدفة (ترجع واجهة برمجة التطبيقات رمزًا مميزًا صالحًا ولكن الصفحة لا تزال ترفضه).

أكبر ثلاث مشاكل خاصة بTurnstile هي:

  1. عنوان URL الدقيق للصفحة غير صحيح — خاصةً على صفحات تحدي Cloudflare، حيث يكون السياق أكثر صرامة
  2. مفتاح موقع خاطئ — تم التقاطه من عنصر خاطئ أو من مثيل عنصر واجهة مستخدم مختلف
  3. تم تطبيق الرمز المميز عبر المسار الخاطئ — تتوقع الصفحة 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 في طلب الاستطلاع الخاص بك. قد تتضمن استجابة JSON user_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) بإرجاع رمز مميز ولكن الصفحة لا تزال ترفضه؟

  1. تحقق من أن pageurl يطابق الصفحة الدقيقة التي يتم تحميل الأداة فيها.
  2. تحقق مما إذا كانت الصفحة تتوقع الرمز المميز في cf-turnstile-response أو g-recaptcha-response أو كليهما.
  3. تحقق مما إذا كانت الصفحة تستخدم وظيفة رد اتصال بدلاً من (أو بالإضافة إلى) حقل مخفي.
  4. تأكد من استخدام الرمز المميز مرة واحدة فقط - الرموز المميزة للباب الدوار تستخدم لمرة واحدة.

هل يدعم CaptchaAI وكلاء Turnstile؟

نعم. أضف proxy وproxytype إلى طلبك. تعد الوكلاء اختيارية لعناصر واجهة المستخدم Turnstile المستقلة ولكن يوصى بها على صفحات تحدي Cloudflare.

ما هو الفرق بين Turnstile وCloudflare Challenge؟

Turnstile عبارة عن عنصر واجهة مستخدم مضمن يقوم بإرجاع رمز مميز. Cloudflare Challenge عبارة عن عملية تحقق على كامل الصفحة تقوم بإرجاع ملف تعريف الارتباط cf_clearance. إنهم يستخدمون أساليب API مختلفة وأنماط تكامل مختلفة، على الرغم من أن كلاهما من منتجات Cloudflare.


أصلح سير عمل Turnstile الخاص بك

إذا فشل تكامل Turnstile الخاص بك:

  1. التحقق من مفتاح الموقع — استخرجه من data-sitekey أو turnstile.render()
  2. التحقق من عنوان URL للصفحة — استخدم عنوان URL الدقيق، بما في ذلك البروتوكول والمسار
  3. تحقق من مسار الرمز المميز — هل تستخدم الصفحة cf-turnstile-response أو g-recaptcha-response أو رد اتصال؟
  4. استخدم json=1 — استخدم دائمًا استجابات JSON عند استطلاع نتائج Turnstile
  5. لا تعيد استخدام الرموز المميزة — اطلب حلًا جديدًا لكل عملية إرسال

ابدأ بـ حل 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

مقالات ذات صلة

أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.