ما الجديد
تدوير نقاط الخروج هو الجزء الذي يُمكّنه الجميع تلقائيًا. أما بصمة المتصفح الأساسية تحتها فعادةً لا تتغير أبدًا.
يقبل Single وProxy Finder الآن أربعة حقول اختيارية تحدد المتصفح الذي يُمثله طلبك: browser، وos، وversion، وprofile. الفهرس الكامن خلفها متاح للعامة عبر GET /api/profiles ولا يتطلب أي مفتاح API. يضم حاليًا 79 ملفًا تعريفيًا عبر Chrome وEdge وSafari وFirefox وTor، على أنظمة Windows وmacOS وAndroid وiOS.
وعندما لا تحدد ملفًا، سيقوم Proxy Finder بتغييره نيابة عنك. ولكن فقط بعد أن يُثبت الموقع مرتين أنه يرفض الملف الذي أرسلته.
آلية العمل
ثلاثة من الحقول مخصصة للبشر وحقل واحد للآلات.
تُضيق الحقول browser وos وversion نطاق الفهرس، ويمكنك إرسال أي مجموعة فرعية منها. يُطابق os حسب العائلة، لذا فإن طلب macOS يقبل كل إصدار macOS في القائمة، بينما يُضيق طلب تسمية الإصدار بدقة النطاق إلى ذلك الإصدار بعينه. وعندما يظل هناك عدة ملفات تعريف متطابقة، تكون الأولوية للإصدار الأحدث، لأن مواكبة التحديثات هي الهدف الأساسي. فالإصدارات الرئيسية القديمة هي ما تركز عليه قوائم الحظر.
curl -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "GET",
"url": "https://example.com/listing/42",
"browser": "Safari",
"os": "iOS"
}'
يُترجم ذلك إلى أحدث إصدار من Safari على iOS في الدليل، ويرسل User-Agent وclient hints وترتيب الـ headers المطابق له، بهذا الترتيب تماما. ترتيب الـ header بحد ذاته يعد إشارة، لذا لا يتم فرز أي شيء أثناء الإرسال.
profile هو الحقل الرابع: معرف دقيق من الدليل، مخصص للكود الذي يجب أن يستمر في إرسال العميل نفسه حتى بعد صدور إصدار أحدث. يستقبل Proxy Finder هذه الحقول الأربعة داخل كائن request الخاص به. القائمة الكاملة للمعلمات متوفرة في مرجع الـ API، كما يقرأ Playground الدليل نفسه، لذا لا تعرض قوائمه المنسدلة إلا ما يمكن للكود الخاص بك طلبه. تنتقل الحقول الأربعة نفسها داخل foura_single وfoura_proxy على خادم MCP، مما يتيح للوكيل إعادة المحاولة كمتصفح آخر بدلا من إرجاع خطأ 403 صريح.
أمران يرفض هذا النظام تنفيذهما عن قصد.
أي تركيبة لا يمكن للدليل تقديمها تُرجع خطأ يحدد ما هو متاح لذلك المتصفح. الرجوع التلقائي إلى إعداد افتراضي كان سيرسل عميلا لم تختره ولا يمكنك رؤيته في الـ response. كما يتم رفض اختيار profile يتضمن unblocker: false، لأن هذه الراية هي المسؤولة عن نقل الـ headers (ما تفعله هذه الراية فعليا). نصف profile أسوأ من عدم وجوده إطلاقا.
الدليل نفسه مبني على القياس الفعلي، وليس مدخلا يدويا. يقوم سكريبت بتشغيل كل profile عبر مسار الـ request الحقيقي ويسجل ما تم إرساله عبر الشبكة فعليا. هذا الأمر أهم مما يبدو: فبين إصدارين رئيسيين حديثين لمتصفح واحد، تغيرت سلسلة العلامة التجارية البديلة وانعكس ترتيب العلامات التجارية، وهذا تحديدا نوع التفاصيل التي تعتمد عليها خدمات الكشف.
الأثر
إليك الجزء الذي لم نكن نتوقعه.
الإعداد الافتراضي هو إعداد افتراضي مشترك. العميل الذي يقدمه الـ request الخاص بك عندما لا تطلب شيئا محددا هو العميل نفسه الذي يقدمه كل request لم يطلب شيئا، وأنظمة الحماية التي تبحث عن مؤشر منخفض التكلفة تركز على هذا بالتحديد. ويفشل هذا بطريقة لا تشبه أي شيء آخر: الموقع الذي يرفض متصفحا معينا يرفضه عبر كل نقطة خروج تمتلكها. فتستنفد كامل ميزانية إعادة المحاولة فقط لتثبت أن العميل نفسه غير مرحب به.
قسنا ذلك ثلاث مرات، مع ثلاثة مزودين مختلفين، وكانت النتيجة متطابقة في كل مرة.
بوابة عقارية محمية بواسطة PerimeterX رفضت تسع محاولات باستخدام الإعداد الافتراضي. تغيير المنصة التي يدعيها الـ request فقط (مع بقاء كل شيء آخر كما هو، ونفس الـ pool) أدى إلى جلب الصفحة ست مرات من أصل ست. متجر مكملات غذائية محمي بواسطة Akamai رفض الإعداد الافتراضي وخدم عائلتين أخريين من المتصفحات دون أي مشكلة. موقع أخبار مالية محمي بواسطة DataDome رد على الإعداد الافتراضي برمز 401 وصفحة بينية بحجم 774 بايت، بينما قامت ثلاثة profiles أخرى بجلب الصفحة الحقيقية، بحجم يقارب 760 كيلوبايت، بمعدل اثنتي عشرة مرة لكل منها. قمنا بتشغيل هذا الاختبار ذهابا وإيابا للتأكد من أن الترتيب لم يكن هو السبب في النتيجة.
لذلك، يقوم Proxy Finder الآن بتدوير عائلة المتصفح، وليس فقط مخرج proxy. يجب أن يرفض مخرجان مستقلان قبل أن يتحرك، لأن الرفض الفردي هو مجرد تقدير لمخرج واحد. بعد ذلك، يتدرج عبر سلم يبدأ بأصغر تغيير ممكن، وهو نظام التشغيل (platform)، وفقط بعد ذلك يجرب عائلات أخرى.
هذا لا يكلف شيئاً. يغير التدوير ما يرسله خيار إعادة المحاولة (retry)، ولا يغير أبداً ما إذا كانت إعادة المحاولة ستحدث أم لا، وبالتالي تبقى الطلبات والرصيد لكل مهمة كما كانت تماماً.
للمستخدمين المتقدمين
يبقى التدوير بعيداً عن طريقك، وقواعد ذلك تستحق المعرفة.
لا يعمل التدوير أبداً عندما تحدد اسم profile بنفسك. كما أنه لا يعمل أبداً عندما ترسل header خاص بك من نوع user-agent أو cookie، وهذه النقطة هي الأهم: يرتبط clearance cookie بالعميل (client) الذي حصل عليه، وبالتالي فإن تدوير البصمة أثناء إعادة تشغيل جلسة تعمل بنجاح سيؤدي إلى كسر request كان ناجحاً. ثبّت ما تريده وسيبقى مثبتاً.
لا يُعتبر كل فشل دليلاً لنقل الـ profile أيضاً. مزود الحماية المعروف يُعتبر دليلاً. كذلك تُعتبر حالة الرفض الصريحة (401، 403، 429، 503) دون تحديد اسم مزود حماية، وقد تبين أن هذه النقطة مهمة. عادت إحدى المهام بثماني حالات رفض ولم يتم التعرف على أي مزود حماية في أي منها: كانت حالات رفض حقيقية يتجاهلها التدوير، لأنه كان يثق فقط في أداة الكشف (detector). لا تُحتسب الصفحة المفقودة أو الحظر الجغرافي. هذه إجابات تتعلق بالـ URL وموقعك الجغرافي، وليست متعلقة بالـ client الخاص بك.
يمكنك رؤية كل شيء. يحتوي response الناجح من Proxy Finder على profile فقط عندما نختاره نحن، وليس عندما تختاره أنت. وتحتوي المهمة الفاشلة على attemptReport.profilesTried: العائلات التي أرسلتها، بترتيب الاستخدام الأول، مع default لأي request خرج دون تعديل. من دون هذا الحقل، سيبدو "جربنا أربعة متصفحات وتم رفض كل منها" و"لم نغير المتصفح أبداً" متطابقين تماماً من الخارج.
عادة تستحق الاقتباس: عندما تختبر ما إذا كان الـ profile مفيداً، ثبّت كل شيء آخر. يوضح تقرير Scrapfly لعام 2026 حول أدوات اختبار بصمات الأصابع هذه النقطة جيداً، حيث إن تغيير ثلاثة متغيرات بين عمليات التشغيل يخبرك بأن هناك شيئاً قد نجح، لكنه لا يوضح أي تغيير كان المؤثر. نفس الهدف، نفس الـ exit، وتغيير حقل واحد فقط. بهذه الطريقة أيضاً تم استخراج كل رقم مذكور أعلاه.
ما التالي
لا يتوسع سلم الخيارات المرشحة إلا عبر القياس، هدفاً تلو الآخر. تتم إضافة عائلة بعد أن نراها تنجح في فتح هدف عجز عنه الإعداد الافتراضي، وليس لمجرد أنها بدت تخميناً جيداً، وتتم إعادة قياس الدليل مع كل تحديث للمحرك بدلاً من ترحيله كما هو.
هذه هي الطبيعة المعقدة لهذه المشكلة. أفضل توقيع للـ client هو هدف متحرك، وتتبعه عمل مستمر وليس مجرد ميزة تُطلقها مرة واحدة، وكل ما حقق نجاحاً في الربع الماضي أصبح مدرجاً في قائمة حظر لدى جهة ما الآن. ولهذا السبب فهو حقل تقوم بتعيينه ودليل يمكنك قراءته، بدلاً من كونه رقماً اخترناه لك.