يعد استخدام طريقة CaptchaAI الخاطئة لحماية Cloudflare أحد الأخطاء الأكثر شيوعًا. يبدو Cloudflare Challenge وCloudflare Turnstile متشابهين ولكنهما مختلفان بشكل أساسي. إن إرسال turnstile عندما يستخدم الموقع تحدي الصفحة الكاملة - أو العكس - سيفشل دائمًا.
نوعي الحماية Cloudflare
| ميزة | Cloudflare Challenge | Cloudflare Turnstile |
|---|---|---|
| النوع | إعلان بيني بملء الصفحة | القطعة المدمجة |
| المظهر | حظر الصفحة بأكملها، "التحقق من المتصفح الخاص بك" | مربع اختيار صغير أو عنصر واجهة مستخدم غير مرئي داخل النموذج |
| طريقة CaptchaAI | cloudflare_challenge |
turnstile |
| المرتجعات | ملف تعريف الارتباط cf_clearance |
سلسلة رمزية |
| يتطلب الوكيل | نعم (إلزامي) | موصى به |
| يتطلب وكيل المستخدم | نعم (إلزامي) | لا |
كيفية التعرف على Cloudflare Challenge
Cloudflare Challenge عبارة عن صفحة بينية بملء الصفحة تمنع الوصول إلى المحتوى. تراه قبل تحميل الصفحة الفعلية.
علامات بصرية:
- رسالة "يتم التحقق من متصفحك قبل الوصول إلى...".
- أداة تحميل Cloudflare
- يحتوي عنوان الصفحة على "لحظة واحدة فقط..."
- يظل عنوان URL كما هو ولكن المحتوى عبارة عن صفحة Cloudflare
علامات HTML:
<!-- Cloudflare Challenge page indicators -->
<title>Just a moment...</title>
<div id="challenge-running">...</div>
<div class="cf-browser-verification">...</div>
الكشف البرمجي:
import requests
resp = requests.get("https://example.com")
is_cf_challenge = (
resp.status_code == 403 and
"Just a moment" in resp.text or
"cf-browser-verification" in resp.text or
"challenge-platform" in resp.text
)
if is_cf_challenge:
print("Cloudflare Challenge detected — use method: cloudflare_challenge")
كيفية التعرف على Cloudflare Turnstile
يعد Turnstile أداة مضمنة داخل صفحة تم تحميلها بالفعل. ويظهر ضمن النماذج، مثل reCAPTCHA.
علامات بصرية:
- عنصر واجهة المستخدم Cloudflare الصغير داخل النموذج (نمط مربع الاختيار)
- بقية محتوى الصفحة مرئية
- القطعة تقول "التحقق من أنك إنسان"
علامات HTML:
<!-- Turnstile widget indicators -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAADnPIDROz1234"></div>
<!-- Or loaded via JavaScript -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js"></script>
الكشف البرمجي:
import requests
resp = requests.get("https://example.com/login")
is_turnstile = (
"cf-turnstile" in resp.text or
"challenges.cloudflare.com/turnstile" in resp.text
)
if is_turnstile:
# Extract sitekey
if 'data-sitekey="' in resp.text:
start = resp.text.index('data-sitekey="') + 14
end = resp.text.index('"', start)
sitekey = resp.text[start:end]
print(f"Turnstile detected — sitekey: {sitekey}")
print("Use method: turnstile")
وظيفة الكشف مجتمعة
def detect_cloudflare_type(url):
"""Detect which Cloudflare protection a URL uses."""
resp = requests.get(url, allow_redirects=True)
# Check for full-page Challenge
if resp.status_code in [403, 503]:
if any(marker in resp.text for marker in [
"Just a moment",
"cf-browser-verification",
"challenge-platform",
"challenge-running"
]):
return {"type": "cloudflare_challenge", "method": "cloudflare_challenge"}
# Check for embedded Turnstile
if "cf-turnstile" in resp.text or "challenges.cloudflare.com/turnstile" in resp.text:
sitekey = None
if 'data-sitekey="' in resp.text:
start = resp.text.index('data-sitekey="') + 14
end = resp.text.index('"', start)
sitekey = resp.text[start:end]
return {"type": "turnstile", "method": "turnstile", "sitekey": sitekey}
return {"type": "none", "method": None}
# Usage
result = detect_cloudflare_type("https://example.com")
print(f"Protection: {result['type']}")
print(f"CaptchaAI method: {result['method']}")
حل كل نوع
Cloudflare Challenge:
data = {
"key": "YOUR_API_KEY",
"method": "cloudflare_challenge",
"pageurl": "https://example.com",
"proxy": "host:port:user:pass", # MANDATORY
"proxytype": "HTTP", # MANDATORY
"userAgent": "Mozilla/5.0 ...", # MANDATORY
"json": 1
}
# Returns cf_clearance cookie — set it in your session
Cloudflare Turnstile:
data = {
"key": "YOUR_API_KEY",
"method": "turnstile",
"sitekey": "0x4AAAAAAADnPIDROz1234",
"pageurl": "https://example.com/login",
"json": 1
}
# Returns a token — inject into cf-turnstile-response field
الأخطاء الشائعة
| خطأ | النتيجة | إصلاح |
|---|---|---|
استخدام turnstile لصفحة التحدي |
ERROR_CAPTCHA_UNSOLVABLE |
قم بالتبديل إلى cloudflare_challenge |
استخدام cloudflare_challenge للباب الدوار |
صيغة الرد خاطئة | قم بالتبديل إلى turnstile |
| لا يوجد وكيل للتحدي | ERROR_PROXY_NOT_AUTHORIZED |
إضافة وكيل — إنه إلزامي للتحدي |
| لا يوجد مفتاح موقع لـ Turnstile | ERROR_BAD_PARAMETERS |
استخراج مفتاح الموقع من صفحة HTML |
الأسئلة الشائعة
هل يمكن للموقع استخدام كلا من Challenge و Turnstile؟
نعم. قد يستخدم الموقع Cloudflare Challenge عند الوصول الأولي وTurnstile في نموذج تسجيل الدخول الخاص به. تحتاج إلى حل كلاهما بالتسلسل.
لماذا يتطلب التحدي وجود وكيل ولكن Turnstile لا يتطلب ذلك؟
يقوم التحدي بإرجاع ملف تعريف الارتباط cf_clearance المرتبط بعنوان IP. يجب على CaptchaAI استخدام الوكيل الخاص بك لإنشاء ملف تعريف ارتباط يعمل من عنوان IP الخاص بك. يقوم Turnstile بإرجاع رمز مميز مستقل عن IP.
ماذا لو أعاد الاكتشاف "لا شيء" ولكنني مازلت أرى Cloudflare؟
يتم تشغيل بعض إجراءات حماية Cloudflare فقط عند إجراءات محددة (طلبات POST، أو استدعاءات واجهة برمجة التطبيقات) أو لوكلاء مستخدمين محددين. حاول الوصول إلى عنوان URL باستخدام وكيل مستخدم يشبه الروبوت لبدء التحدي.
حل اختبارات CAPTCHA الخاصة بـ Cloudflare باستخدام CaptchaAI
التعامل مع كل من التحدي وTurnstile فيcaptchaai.com.