كل المقالات

ملخص FourA: من 26 يونيو إلى 3 يوليو 2026

تم إطلاق Auto إلى prod: endpoint واحد يختار بين Single أو Proxy Finder أو Browser ويتعامل مع تحديات Cloudflare. بالإضافة إلى 6 لغات جديدة على مواقعنا.

أبرز المستجدات

تم إطلاق Auto إلى بيئة الإنتاج هذا الأسبوع. وجهه إلى أي URL وسيقوم بتتبع مسار متدرج يراعي التكلفة (الفحص probe، العثور على مخرج find an exit، حل المتصفح browser solve، وإعادة التشغيل الاقتصادية cheap replay) ويعيد المحتوى بالإضافة إلى الـ session التي جلبته. يستغرق حل تحدي Cloudflare Turnstile البارد على minfin.bg حوالي 5 ثوانٍ عبر Auto؛ بينما تعيد المكالمة التالية التشغيل عبر Single مقابل 2 credits. أضفنا أيضاً 6 لغات جديدة عبر المدونة، والتوثيق docs، وبوابة التحديثات، مما يرفع عدد اللغات لدينا من 7 إلى 13.

ما الجديد

Auto: endpoint واحد، أربعة منتجات، ومراعاة للتكلفة

POST /api/auto أصبح متاحاً الآن. تمرر له URL ويقوم باختيار المنتج المناسب (Single أو Proxy Finder أو Browser)، ويتعامل مع تحديات Cloudflare عند ظهورها، ثم يعيد الـ response بالإضافة إلى كائن session يحتوي على معرف الـ proxy، والـ cookies، والـ user agent الذي نجح في العملية. أعد استخدام الـ session المسترجعة في المكالمة التالية وسيقوم Auto بإعادة التشغيل عبر Single مقابل 2 credits بدلاً من عناء الحل من جديد.

تحمل كل response الآن تتبع meta لتتمكن من معرفة الخطوة التي نجحت، وما إذا تم حل نظام الحماية، وعدد المكالمات الفرعية المستهلكة، وإجمالي الـ credits التي تم إنفاقها. أحضر قواعد الـ validate الخاصة بك وسيقوم Auto بفرضها على كل خطوة، وليس فقط الخطوة الأخيرة، وبالتالي فإن صفحة الحظر الجغرافي (geo-block) التي تعود مع رمز الاستجابة transport 200 لن تُعتبر نجاحاً بعد الآن كما كان يحدث سابقاً.

حصلت مساحة تجربة Dashboard على تبويب Auto مع ربط timeout_ms و ignoreProxies و returnSession و forceProxy لتتمكن من تشغيل Auto من خلال نموذج قبل دمجه في الكود.

6 لغات جديدة

انضمت الإسبانية، والفرنسية، واليابانية، والكورية، والبرتغالية البرازيلية، والروسية إلى المدونة، والتوثيق docs، وبوابة التحديثات، مما يرفع عدد لغات مواقعنا العامة من 7 إلى 13. تتم ترجمة المحتوى عبر pipeline يراعي الأدوار (role-aware): تحصل تسميات التنقل (nav labels) على توجيه يفضل الإيجاز على الترجمة الحرفية ليظل الشريط الجانبي قصيراً، بينما تحصل نصوص المقالات على توجيه للحفاظ على الـ markdown لتظل كتل الكود والعناوين سليمة دون تغيير.

تمت إعادة بناء أداة تبديل اللغة أيضاً. تمت إزالة الأعلام (علم إسبانيا يستبعد 20 دولة أخرى تتحدث الإسبانية، وينطبق المنطق نفسه على البرتغالية، والعربية، والإنجليزية). تحمل الأسماء الأصلية الإشارة الآن، ويعرض كل خيار أيضاً اسمه بلغة واجهة المستخدم النشطة، بحيث يمكنك العثور على "Deutsch" في صورة "немски" من متصفح بلغاري. اكتب في مربع البحث في الأعلى لتصفية 13 locale إلى الخيار الذي تريده، واستخدم مفاتيح الأسهم للتحرك، واضغط على enter للتبديل. كل خيار عبارة عن رابط <a href> حقيقي مع hreflang و lang لتتمكن محركات البحث وزواحف الذكاء الاصطناعي من تتبع كل إصدار لغوي.

التعامل مع Cloudflare: ما تم إصلاحه بالفعل

يتعامل Auto الآن مع أربع حالات في Cloudflare كانت تتسبب سابقاً في تسريب الـ response الخاطئ:

  • لم تعد الصفحة البينية "Just a moment" التي يتم تقديمها مع transport 200 تُعتبر نجاحاً. يقوم Auto بالتصعيد إلى خطوة الحل بدلاً من تسليمك صفحة التحدي.
  • يتم رندرة التحديات غير التفاعلية (مثل التجاوز التلقائي لـ "Checking your browser" في marathonbet) من جانب العميل بعد الحصول على الترخيص. يقوم Browser بفحص الـ DOM المباشر وإنهاء العملية فور استقرار cf_clearance بدلاً من حدوث timeout على response فارغ في المستوى الأعلى.
  • يتم احترام حالة ما بعد الترخيص الحقيقية. فالحظر الجغرافي الذي تقدمه Cloudflare بعد اجتياز التحدي يعيد الرمز 451، وليس 200 مع body مريب.
  • يتم حل تحدي Turnstile التفاعلي (minfin.bg) بالكامل (end-to-end). يحاول Auto أولاً إجراء حل عبر متصفح بمخرج مباشر direct-egress (حيث يجتاز endpoint المخرج الموثوق تحدي Turnstile بينما تتسبب مخارج مراكز البيانات المجانية في تصعيد التحدي)، ثم يتراجع إلى محاولات الـ proxy المتكررة في حال فشل ذلك.

MCP: foura_auto والاكتشاف العام

حصل خادم MCP على أداة foura_auto التي تحاكي /api/auto. مرر لها URL، وستحصل على المحتوى والـ session. أصبح الاكتشاف (الأدوات، والـ prompts، والقدرات) غير موثق (unauthenticated) لتتمكن الوكلاء (agents) من التصفح قبل المصادقة، ويتم توجيه خريطة /llms.txt عبر proxy عند الجذر. انتقلت الصفحة الهبوط إلى foura.ai/mcp للحفاظ على قيمة الروابط (link equity)، ويقوم النطاق الفرعي بعمل تحويل 301 للمتصفحات إلى هناك.

خلف الكواليس

قمنا بتشديد حدود SSRF حول أدوات الجلب (fetchers). يمنع جدار حماية المخرج (egress firewall) على مستوى النواة (kernel-level) الخدمتين المسؤولتين عن إصدار الـ requests من فتح اتصالات مع نطاقات العناوين الخاصة، و CGNAT، و link-local، وبيانات التعريف السحابية (cloud metadata). لقد كان الفحص على مستوى التطبيق يغطي الـ URL بالفعل، والآن لا يمكن للمسارات ذات المستوى الأدنى تمرير أي شيء أيضاً. يتم التعامل مع حقل proxy في الـ request بالأسلوب نفسه: يتم رفض مضيف الـ proxy المقدم من العميل والذي يشير إلى عنوان خاص قبل خروج الـ request.

لم يعد سجل النشاط (Activity log) يخزن أي URL لـ proxy غير معالج على الإطلاق، حتى عندما يرسله العميل. تحمل الـ response التي تراها دائماً معرف الـ proxy غير الشفاف بترميز base36، وتتطابق حمولة البيانات (payload) المخزنة مع ذلك. قمنا أيضاً بإزالة الـ header‏ x-powered-by من كل API response.

الأرقام

  • حل تحدي Turnstile التفاعلي على minfin.bg: رمز الاستجابة 200 مع محتوى الوزارة في حوالي 5 ثوانٍ، ثم 2 credits لكل إعادة تشغيل عبر الـ session المخزنة مؤقتاً.
  • عند استهداف موقع يطبق قيوداً على معدل الطلبات (rate-limited) تحت ضغط متزامن، يتوزع Auto الآن عبر مخارج متعددة (تم استخدام 4 مخارج مميزة على مضيف ذي مخرج ثابت، و 21 من أصل 24 إعادة تشغيل بمعدل 2 credits) بدلاً من تكديس كل request على مخرج واحد.
  • 13 لغة متاحة الآن عبر المدونة، والتوثيق docs، والتحديثات.

يمثل Auto شكل الـ API الذي كنا نسعى لبنائه طوال هذا الربع. وجهه إلى URL، واحصل على الـ response، واحتفظ بالـ session. العمل المثير للاهتمام الآن يكمن في التفاصيل الدقيقة: قياس مدى استهلاك المسار المتدرج المراعى للتكلفة على ترافيك موقعك الفعلي، والعثور على أنماط الـ validate التي تكتشف حالات النجاح الزائف (false-positive) التي لا يفكر فيها أحد.