إذا اصطدم سكربت الأتمتة لديك بصفحة تقول "جارٍ التحقق من متصفحك قبل الدخول..." وعاد بالرمز 403 بدل المحتوى، فأنت أمام Cloudflare Challenge: صفحة تحقق تحجب الموقع بأكمله قبل أن يصل إليه أي طلب. هي ليست عنصر Turnstile المضمّن داخل الصفحة، بل صفحة بينية كاملة تحلّ محلّ المحتوى الأصلي حتى يجتاز المتصفح فحصاً برمجياً.
بمجرد اجتياز الفحص، يمنحك Cloudflare ملف تعريف ارتباط اسمه cf_clearance؛ وطالما أرسلته مع كل طلب لاحق، تمرّ طلباتك دون إعادة اعتراض. وهذا الملف تحديداً ما يجعل حلّ التحدي أصعب قليلاً من غيره.
تدفق التحدي من الطلب حتى منح الوصول
Request → Cloudflare proxy → Suspicious? → Challenge page
↓
Browser verification
↓
cf_clearance cookie set
↓
Original page loads
يمرّ الطلب بستّ مراحل قبل أن يصل إلى الصفحة الحقيقية:
- اعتراض الطلب — يستقبل الوكيل العكسي لـ Cloudflare كل طلب قبل وصوله إلى الخادم الأصلي.
- تقييم المخاطر — يُحلَّل سمعة عنوان IP ورؤوس HTTP وبصمة TLS ونمط السلوك.
- إرسال التحدي — عند وجود شكّ، تحلّ صفحة التحدي محلّ الاستجابة المقصودة.
- التحقق من المتصفح — تُشغَّل اختبارات JavaScript للتأكد من أن المتصفح بيئة حقيقية.
- تعيين ملف الارتباط — عند النجاح، يُنشأ ملف
cf_clearanceبمدّة صلاحية قابلة للضبط. - منح الوصول — يُعاد تحميل الصفحة، فيستلم المتصفح المحتوى الأصلي هذه المرة.
ما الذي يستدعي ظهور Cloudflare Challenge
لا يظهر التحدي عشوائياً، بل يُطلقه محرك يمنح كل طلب درجة مخاطرة. أكثر المحفّزات شيوعاً:
| المحفّز | الوصف |
|---|---|
| عنوان IP لمركز بيانات | طلب صادر من مزوّدي استضافة معروفين |
| رؤوس مفقودة | رؤوس HTTP ناقصة أو غير معتادة |
| بصمة TLS | تطابق بصمة JA3/JA4 توقيعات روبوتات معروفة |
| ارتفاع معدل الطلبات | عدد كبير جداً من الطلبات من العنوان نفسه |
| مستوى الأمان | ضبط مالك الموقع عتبة التحدي على مستوى مرتفع |
| قواعد جغرافية | حجب أو تحدٍّ بحسب الدولة |
| درجة الروبوت | تقييم Cloudflare للسلوك منخفض جداً |
| تهديد معروف | ظهور العنوان في قوائم استخبارات التهديدات |
سيناريو واقعي: فريق في متجر إلكتروني خليجي يبني أداة لمراقبة أسعار المنافسين ويشغّلها من خادم سحابي في أوروبا، فتُصنَّف طلباتها على أنها من عنوان IP لمركز بيانات ويظهر التحدي في كل مرة. الحلّ ليس تكرار المحاولة، بل تمرير الطلبات عبر وكيل سكني ضمن المنطقة التي يخدمها الموقع.
ملف cf_clearance: قلب عملية التحقق
بعد اجتياز التحدي، يستقبل المتصفح ملف ارتباط بهذه الصورة:
cf_clearance=abc123...; path=/; domain=.example.com; secure; HttpOnly; SameSite=None
أهم خصائصه في سياق الأتمتة:
- المدة: من 15 دقيقة إلى 24 ساعة، يضبطها مالك الموقع.
- النطاق: مرتبط بالمجال المحدّد وحده.
- الربط: مقيَّد بوكيل المستخدم وعنوان IP المستخدمَين أثناء التحقق.
- الاستخدام: يجب إرفاقه بكل طلب لاحق لتفادي إعادة الاعتراض.
نقطة جوهرية: ملف
cf_clearanceمربوط بـ وكيل المستخدم (User-Agent) وعنوان IP المحدّدين وقت التحقق. أي تغيير في أحدهما يُبطل الملف ويعيدك إلى صفحة التحدي.
لماذا يشترط الحل وكيلاً (Proxy) ثابتاً
ما يميّز Cloudflare Challenge عن غيره أن ملف cf_clearance مربوط تشفيرياً بثلاثة عناصر:
- عنوان IP — يجب أن يتم الحلّ من العنوان نفسه الذي ستستخدمه لاحقاً.
- وكيل المستخدم — يجب أن يطابق وكيل الحلّ ما ترسله لاحقاً.
- بصمة TLS — تتحقق بعض الإعدادات كذلك من خصائص TLS.
إذا اختلف أيٌّ منها بين لحظة الحلّ والطلبات اللاحقة، يصبح الملف بلا قيمة. فلا يكفي الحصول على cf_clearance صالح، بل الحفاظ على العنوان والوكيل ثابتَين.
Cloudflare Challenge مقابل Turnstile وتحدي JavaScript
كثيرون يخلطون بين الأنواع الثلاثة من Cloudflare رغم اختلافها الجوهري في التجربة والتعامل:
| الميزة | Cloudflare Challenge | Turnstile | تحدي JavaScript |
|---|---|---|---|
| النوع | صفحة بينية كاملة | عنصر داخل الصفحة | فحص صامت |
| ما يراه المستخدم | صفحة "التحقق من المتصفح" | خانة اختيار أو لا شيء | لا شيء |
| يحجب الوصول للصفحة | نعم | لا | لفترة وجيزة |
| ينشئ cf_clearance | نعم | أحياناً | نعم |
| يتطلب وكيلاً للحل | نعم | لا | غير منطبق |
| يشترط استخدام Cloudflare CDN | مطلوب | اختياري | مطلوب |
باختصار: يُوضع Turnstile على أي موقع ونادراً ما يحتاج وكيلاً، بينما لا يظهر Challenge إلا خلف Cloudflare ويحتاج دائماً وكيلاً ثابتاً.
حل Cloudflare Challenge عبر CaptchaAI
يتطلب حلّ التحدي وكيلاً لأن ملف cf_clearance مربوط بعنوان IP. أرسِل مهمّة الحلّ مع بيانات الوكيل، ثم استطلع النتيجة دورياً.
بايثون
import requests
import time
API_KEY = "YOUR_API_KEY"
# Submit task — proxy is REQUIRED
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": "https://example.com/protected-page",
"proxy": "username:password@proxy.example.com:8080",
"proxytype": "HTTP",
"json": 1
})
task_id = response.json()["request"]
# Poll for result
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
solution = result["request"]
# solution contains cf_clearance cookie + user_agent
print(f"cf_clearance: {solution}")
break
Node.js
const axios = require('axios');
async function solveCloudflareChallenge(pageurl, proxy) {
const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
params: {
key: 'YOUR_API_KEY',
method: 'cloudflare_challenge',
pageurl,
proxy,
proxytype: 'HTTP',
json: 1
}
});
const taskId = data.request;
for (let i = 0; i < 60; i++) {
await new Promise(r => setTimeout(r, 5000));
const res = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
});
if (res.data.status === 1) return res.data.request;
}
throw new Error('Timeout');
}
استخدام ملف cf_clearance
تتضمّن الاستجابة ملف cf_clearance ووكيل المستخدم المطابق له؛ استخدم الوكيل ووكيل المستخدم نفسيهما في كل الطلبات التالية:
# After getting the solution
cf_clearance = solution["cf_clearance"]
user_agent = solution["user_agent"]
# Use the SAME proxy and user agent for subsequent requests
session = requests.Session()
session.cookies.set("cf_clearance", cf_clearance, domain=".example.com")
session.headers["User-Agent"] = user_agent
session.proxies = {"https": "http://username:password@proxy.example.com:8080"}
# Now access the protected page
page = session.get("https://example.com/protected-page")
print(f"Status: {page.status_code}")
الأسئلة الشائعة
لماذا يظهر لي التحدي رغم أنني مستخدم حقيقي؟
لأن Cloudflare لا يقيّم هويتك بل إشارات الطلب: عنوان IP والرؤوس وبصمة TLS والسلوك. لذا قد يظهر لمستخدم حقيقي يتصل عبر VPN أو من عنوان IP مشبوه سابقاً.
هل يكفي تدوير عناوين IP وحده لتفادي التحدي المتكرر؟
لا، فالتدوير وحده لا يكفي؛ حافظ في كل جلسة على:
- عنوان IP ثابت طوال عمر ملف
cf_clearance. - وكيل مستخدم مطابق لما استُخدم أثناء الحلّ.
هل يمكن مشاركة ملف cf_clearance بين عدة خوادم أو أعضاء الفريق؟
عملياً لا. الملف مربوط بعنوان IP ووكيل المستخدم اللذين تمّ التحقق بهما، فإذا استخدمه خادم بعنوان مختلف صار غير صالح.
ما الذي يجعل حلّ التحدي أبطأ من Turnstile؟
لأنه يتطلب التحقق الكامل من المتصفح وتشغيل JavaScript، فيستغرق عادةً بين 20 و60 ثانية، أطول من Turnstile أو reCAPTCHA.
كيف أتعامل مع صفحة تحمي نفسها بـ Cloudflare وreCAPTCHA معاً؟
احلّ Cloudflare Challenge أولاً للوصول إلى الصفحة، ثم احلّ reCAPTCHA الظاهر داخلها. الترتيب ضروري لأن الصفحة لا تُحمَّل قبل اجتياز التحدي.