دفاعات مكافحة البوتات
عندما يقوم الهدف بتشغيل فحص روبوت في الطريق إلى الصفحة التي طلبتها، يخبرك FourA بذلك. يعود كل request يواجه فحصا بحقل يسمي النظام، وما إذا كان قد تم تخطي الفحص، و(عند التخطي) التصريح الذي يمكنك إعادة تشغيله حتى يتخطاه الاستدعاء التالي.
هذه الصفحة هي المرجع لتلك الحقول. لمعرفة الاستراتيجية، انظر التعامل مع حماية مكافحة الروبوتات.
أين يوجد الحقل
| Endpoint | الحقل | موجود عندما |
|---|---|---|
POST /api/single/ |
defense (كائن) |
تم التعرف على فحص روبوت في الـ response |
POST /api/proxy/ |
defense (كائن) |
نفس الشيء، تم الإبلاغ عنه بواسطة المحاولة التي استجابت |
POST /api/browser/ |
defenseSolved (قيمة منطقية) و defenses (كائن) |
تم التعرف على فحص روبوت أثناء تحميل الصفحة |
POST /api/auto/ |
meta.solved (قيمة منطقية) |
دائما. true عندما يتم تخطي فحص في مكان ما على السلم. |
الغياب يعني أنه لم يتم التعرف على شيء. لا تقرأ غياب defense على أنه فشل.
الإبلاغ يحتاج إلى unblocker، وهو مفعل افتراضيا. باستخدام unblocker: false لقد طلبت الصفحة تماما كما جاءت، لذلك يعيد Single التحدي دون مساس ويقوم Browser بعرضه دون حله.
defense على Single و Proxy
{
"status": 200,
"data": "<!doctype html>...",
"total_time": 3.61,
"defense": {
"vendor": "sgcaptcha",
"solved": true,
"present": ["sgcaptcha"],
"ms": 3412,
"hashes": 1048576,
"complexity": 20,
"cookie": "_I_=<clearance>"
}
}
| الحقل | النوع | الوصف |
|---|---|---|
vendor |
string | النظام الذي يعنيه هذا السجل: النظام الذي تم تجاوزه، أو النظام الرئيسي الذي تمت مواجهته. راجع قائمة الموردين أدناه. |
solved |
boolean | القيمة true تعني أنه تم تجاوز الفحص وأن data هي الصفحة الحقيقية. القيمة false تعني أن data قد تكون صفحة التحدي. |
present |
string[] | كل نظام تم التعرف عليه في هذا الرد (response). يمكن أن يحتوي على أسماء أكثر من vendor، ويمكن أن يحتوي على أسماء لم يتمكن أحد من تجاوزها بعد. |
ms |
number | الوقت المستغرق بالملي ثانية لتجاوز الفحص. يظهر فقط عند التجاوز. |
hashes |
number | مقدار العمل الحسابي الذي طلبه التحدي. يظهر فقط عند التجاوز. |
complexity |
number | مستوى الصعوبة الذي أعلنه التحدي. يظهر فقط عند التجاوز، وفقط عندما يبلغ التحدي عن ذلك. |
answers |
number | عدد الإجابات المقبولة المقدمة، للتحديات التي تتطلب إجابات متعددة بدلا من واحدة. يظهر فقط عند التجاوز. |
cookie |
string | التصريح الذي تم الحصول عليه جراء التجاوز، جاهز لإعادة الاستخدام. يظهر فقط عند التجاوز. |
solved: false هي الحالة التي تستحق التفرع. لا تقدم FourA أبدا تحديا غير محلول كمحتوى، لذا فإن العلامة هي إشارتك إلى أن المحتوى (body) يحتاج إلى تصعيد بدلا من التحليل (parsing).
defenses على المتصفح
{
"status": 200,
"body": "<!doctype html>...",
"userAgent": "Mozilla/5.0...",
"defenseSolved": true,
"defenses": {
"present": ["cloudflare"],
"cleared": ["cloudflare"]
}
}
| الحقل | النوع | الوصف |
|---|---|---|
defenseSolved |
boolean | true عندما يتم مصادفة نظام أثناء التحميل ويتم الاحتفاظ بتصريحه في الصفحة النهائية. هذه هي العلامة التي تقرر ما إذا كانت تكلفة الاستدعاء 15 أو 30 رصيداً. |
defenses.present |
string[] | كل نظام يتم التعرف عليه في أي نقطة أثناء تحميل الصفحة, وليس فقط في الاستجابة النهائية. الفحص هو شيء حدث, وبحلول الوقت الذي تصل فيه الصفحة الحقيقية, تكون استجابة التحدي قد ولت منذ فترة طويلة. |
defenses.cleared |
string[] | الأنظمة التي تحتفظ الصفحة النهائية بتصريحها. |
الاسم في present الذي لا يصل أبداً إلى cleared هو نظام يمكن لـ FourA التعرف عليه ولكن لا يمكنه تجاوزه بعد. هذه الأنظمة لا ترفع أبداً من سعر الاستدعاء.
الموردون
قيمة vendor |
النظام |
|---|---|
cloudflare |
تحديات Cloudflare وإدارة البوتات |
sgcaptcha |
فحص موقع SiteGround |
datadome |
DataDome |
perimeterx |
PerimeterX |
akamai |
Akamai Bot Manager |
incapsula |
Imperva Incapsula |
awswaf |
تحدي AWS WAF |
ebay-splashui |
تحدي eBay الخاص |
hcaptcha |
hCaptcha |
recaptcha |
reCAPTCHA |
ما يتم تصريحه اليوم
| الـ Endpoint | يصرّح |
|---|---|
| Single, Proxy | sgcaptcha, ebay-splashui. كلاهما حسابي وليس مرئياً, لذلك لا يتدخل أي متصفح. |
| Browser | cloudflare, sgcaptcha |
كل شيء آخر في القائمة يتم التعرف عليه والإبلاغ عنه, ولا شيء أكثر من ذلك. يتحرك هذا التقسيم مع تعلم FourA تصريح المزيد منها, لذا اقرأ solved بدلاً من الافتراض من هذا الجدول.
ملاحظتان على الحواف:
hcaptchaوrecaptchaهما أيضاً أدوات نموذج عادية. يتم الإبلاغ عنها فقط عندما تمنعك الاستجابة فعلياً (403 أو 429 أو 503), لذلك فإن صفحة الدفع التي تحتوي على حقل captcha في نموذج لا تبلغ عن دفاع.- التواجد خلف Cloudflare ليس دفاعاً. يظهر
cloudflareعندما يكون هناك تحدٍ حقيقي أو قطعة فنية لإدارة البوتات في الاستجابة, وليس لأن الموقع يستخدم Cloudflare.
إعادة تشغيل تصريح
defense.cookie هو الهدف الأساسي من الحقل. يرتبط التصريح بالمخرج الذي اكتسبه و User-Agent الذي اكتسبه, لذا أعد تشغيله من خلال نفس الزوج ولن يتم تشغيل الفحص مرة أخرى.
import requests
API = "https://eu.api.foura.ai"
H = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}
# 1) First call pays for the clear.
first = requests.post(f"{API}/api/proxy/", headers=H, json={
"maxTries": 5,
"request": {"method": "GET", "url": "https://example.com/catalog"},
}).json()
defense = first.get("defense", {})
if defense.get("solved"):
clearance = defense["cookie"]
exit_id = first["proxy"]
# 2) Follow-up pages skip the check: same exit, same clearance.
for page in range(2, 6):
r = requests.post(f"{API}/api/single/", headers=H, json={
"method": "GET",
"url": f"https://example.com/catalog?page={page}",
"proxy": exit_id,
"headers": [["Cookie", clearance]],
}).json()
print(page, r["status"])
يحمل الاستدعاء الأول تكلفة التجاوز. كل إعادة تشغيل هي طلب عادي بالسعر العادي.
هناك ثلاثة أشياء تعطل إعادة التشغيل:
- مخرج مختلف. قم بتثبيت معرف الـ proxy الذي أرجعته استجابة التجاوز. راجع إعادة استخدام Proxy عبر الطلبات.
- User-Agent مختلف. ترجع استجابات المتصفح
userAgentالذي استخدمته. أرسله مرة أخرى مع الـ cookie. - انتهاء الصلاحية. لعمليات التجاوز فترات صلاحية خاصة بها، يحددها الهدف. تستمر فترة SiteGround لحوالي 30 يومًا للموقع بأكمله، بينما تكون فترة Cloudflare عادة أقصر بكثير. تعامل مع التجاوز كذاكرة تخزين مؤقت (cache): عندما تبدأ إعادات التشغيل في إرجاع التحديات مرة أخرى، قم بتشغيل استدعاء جديد واحد واستخدم الاستدعاء الجديد.
التكلفة
يؤدي الفحص المتجاوز إلى تغيير السعر على Browser فقط:
| المحرك | الأساسي | الدفاع المتجاوز |
|---|---|---|
| Single | 1 (2 مع unblocker) |
بدون تغيير |
| Proxy | 5 (10 مع unblocker) |
بدون تغيير |
| Browser | 15 | 30 |
يفرض Browser رسومًا قدرها 30 فقط عند تشغيل أداة الحل وتجاوز النظام بشكل حقيقي. يكلف النظام الذي تم التعرف عليه ولم يتم تجاوزه 15، وهو نفس سعر صفحة لا تحتوي على فحص على الإطلاق.
قم بربطه مع validate
يخبرك defense بأنه تم استيفاء فحص. يخبر validate FourA عن شكل الصفحة الحقيقية، وهو ما يسمح بفشل طلب بدلاً من تسليمك صفحة بينية صادف أنها تحمل HTTP 200.
{
"method": "GET",
"url": "https://example.com/product/42",
"validate": {
"data": {"accept": ["Add to cart"], "fail": ["Just a moment"]}
}
}
في POST /api/auto/، validate هو ما يمنع التسلسل من قبول صفحة التحدي واعتبار الأمر منتهياً.
ذات صلة
- التعامل مع حماية مكافحة الروبوتات: أي محرك يجب استخدامه عند كل مستوى حماية
- نقاط نهاية API: مرجع الطلب والاستجابة لجميع نقاط النهاية الأربع
- إعادة استخدام proxy عبر الطلبات: تثبيت المخرج الذي يرتبط به التصريح
- الجلب الذكي (تلقائي): كيف يتناسب
meta.solvedمع التسلسل - ترويسات الاستجابة: أين تظهر تكلفة الرصيد للطلب