ما الجديد
حرف واحد ناقص هو كل ما يتطلبه الأمر. اكتب -contry-de في اسم مستخدم proxy وسيظل الخطأ الإملائي واضحا، ويبدو تماما كخيار صالح للعمل.
يستجيب منفذ FourA proxy لذلك برمز 400 يعرض كل مفتاح يتعرف عليه. هذا تفصيل صغير لمنتج خرج من المرحلة التجريبية في 15 سبتمبر: وهو proxy URL عند نقاط الخروج لدينا لأي عميل يقبله (متصفح، أو أداة تنزيل، أو أداة الكشط التي تشغلها حاليا)، دون الحاجة لكتابة أي استدعاء API. تقوم بإنشاء مستخدم proxy في لوحة التحكم ولصق السلسلة، لتُحسب الأنفاق وحركة المرور ضمن خطتك بنفس طريقة احتساب طلبات API.
إليك البنية النحوية الكاملة، وسبب وجود كل قاعدة فيها.
كيف يعمل
يعمل المنفذ على proxy.foura.ai:34004 ويدعم بروتوكول HTTP CONNECT مع مصادقة Basic، إلى الأهداف على المنفذين 443 و 80. بيانات الاعتماد هي مستخدمو proxy، وهي منفصلة عن مفتاح API الخاص بك عن قصد: تنتقل مصافحة proxy دون تشفير، ويمكن لمستخدم proxy الحصول على كلمة مرور جديدة دون المساس بتكامل API الخاص بك.
كل ما يأتي بعد بيانات الاعتماد هو قائمة بأزواج -key-value، بأي ترتيب:
# Shared network, a German address, one sticky session for this job
curl -x "http://USERNAME-country-de-session-job42:PASSWORD@proxy.foura.ai:34004" \
https://example.com
# Premium network, an Android address in Germany, held 30 minutes
curl -x "http://USERNAME-network-premium-country-de-os-android-session-s1-lifetime-30:PASSWORD@proxy.foura.ai:34004" \
https://example.com
الشبكة المشتركة (Shared) هي نقاط خروج تابعة لـ FourA: وهي الخيار الافتراضي ومضمنة في خطتك. أما شبكة Premium فهي عناوين سكنية منزلية، تُسحب من رصيد premium traffic في خطتك بالإضافة إلى أي رصيد قمت بشرائه. في الشبكة المشتركة، يتيح -fallback-premium للاتصال الانتقال إلى مخرج premium عندما يتعذر على المخرج المشترك نقل البيانات. هذا الخيار معطل افتراضيا ما لم تطلبه، ولا يعمل إلا في حال توفر رصيد premium متبق. فتفعيله افتراضيا كان سيعني اتخاذ قرار نيابة عنك باستهلاك ذلك الرصيد.
خيار الدولة قابل للتكرار، لذا فإن -country-de-country-fr يحدد نطاق دولتين. خيارات المنطقة والمدينة والشبكة عبر رقم AS ونوع الجهاز (windows و android و ios و mac) بالإضافة إلى lifetime (من 3 إلى 1440 دقيقة) تقتصر جميعها على شبكة premium فقط. وإذا طلبت مدينة عبر الشبكة المشتركة فستتلقى رمز 400 بدلا من محاولة تقريبية (best effort). يتم تحديد المخرج المشترك على مستوى الدولة فقط دون أي تفصيل أدق، لأن فلتر المدينة الذي لا يمكن الوفاء به في معظم الأحيان هو أسوأ من عدم وجود فلتر على الإطلاق.
يحدد -session-<name> (من 1 إلى 32 حرفا أو رقما أو شرطة سفلية) تثبيت الاتصالات (sticky): حيث يشترك كل اتصال يحمل هذا الاسم في نفس العنوان. على الشبكة المشتركة، يظل العنوان ثابتا ضمن نافذة زمنية منزلقة مدتها عشر دقائق، مما يجعله يستمر طالما واصلت استخدامه. وعلى شبكة premium، يظل ثابتا للمدة المحددة في lifetime التي تضبطها أنت، أو وفقا للإعداد الافتراضي للشبكة. إذا تركت خيار session فارغا، فسيخرج كل اتصال من عنوان جديد.
وهناك أيضا الإعدادات الافتراضية المحفوظة. الاستهداف المحفوظ على مستخدم proxy في Dashboard يُطبق على كل اتصال يجريه، مما يتيح اختصار نص الاتصال إلى مجرد بيانات الاعتماد الأساسية. ومع ذلك، تبقى الأولوية لاسم المستخدم في الاتصال الخاص به، ويتيح any التراجع عن قيمة محفوظة: حيث يطلب -city-any مفتاحا يحفظ مدينة Munich لكل ألمانيا. كما يمكن للعملاء القادرين على إرسال headers عبر طلب CONNECT (مثل curl باستخدام --proxy-header) إرسال نفس الخيارات مثل X-Foura-Country و X-Foura-Session وغيرها، ويكون للـ header الأولوية على اسم المستخدم.
الأثر
ينعكس معظم هذا على شكل أسئلة لم تعد بحاجة لطرحها.
لماذا تم رفضي؟ يتضمن كل رفض بعد التحقق من بيانات اعتمادك ترويسة X-Foura-Error توضح السبب في سطر واحد. ويحدد رمز 400 الخيار والقيم المقبولة له. بينما يوضح رمز 429 أي حد من حدود خطتك قد استنفدت: سواء كان عدد الأنفاق المفتوحة في وقت واحد، أو عمليات فتح الأنفاق في الدقيقة، أو حجم الترافيك القياسي لفترة الفاتورة.
لمن يتبع الرصيد؟ يتبع للحساب. يتم احتساب الأنفاق وعمليات الفتح على مستوى الحساب وليس لكل مستخدم proxy، لذا فإن إنشاء بيانات اعتماد ثانية لا يمنحك رصيدا إضافيا. تُحتسب وحدات البايت ضمن سعة النطاق الترددي لخطتك، وتُحتسب وحدات بايت premium ضمن رصيد premium المخصص داخل ذلك المجموع، دون أن تُضاف إليه. في الخطة التي تعتمد على نظام الرصيد، يتضمن المنفذ وحدات جيجابايت مخصصة له، ويتم تجديدها عبر صفحة Billing. ولا يتم احتساب أي شيء عند عدم فتح أي نفق.
من يملك بيانات الاعتماد؟ يمكن أن تعود ملكيتها لمؤسسة الآن، وبذلك لا يتوقف نظام التحميل التابع للشركة عند مغادرة أحد الموظفين. يستطيع الأعضاء استخدامها وقراءة كلمة المرور الخاصة بها؛ ويمكن للمسؤولين والمالكين تدويرها أو تعطيلها أو إعادة ضبط استهدافها؛ وفقط المالك هو من يمكنه نقل ملكيتها إلى الخارج.
ما الذي يفعله؟ بدّل مفتاح Product في صفحة Overview أو Metrics أو Activity إلى Proxy: أنفاق تتبع نفس فئات نتائج طلبات API الخاصة بك، عدد الأنفاق المفتوحة حالياً، زمن الإعداد، وحجم البيانات، مقسمة حسب مستخدم proxy، الوجهة، دولة الخروج، أو عنوان IP للعميل. الجلسة التي تملك عنوانها مسبقاً تتصل عادةً في أقل من ثانية بكثير.
لكن المنفذ يعمل كأنبوب، وتلك هي المقايضة. يتواصل عميلك مع الموقع عبر النفق، لذا فإن أداة فك الحظر، وقواعد validate rules الخاصة بك، وحل التحديات المعتمد على المتصفح ليست ضمن هذا المسار. كما أنه يقيس البايتات أيضاً: صفحة الرفض التي تصل عبر نفق مفتوح تُحسب بايتات كغيرها، بينما في API لا تتم فوترة الطلب غير الناجح. انقل البايتات عبر المنفذ، وأرسل الصفحات المستعصية إلى API.
للمستخدمين المتقدمين
بمجرد استنفاد الرصيد المخصص للشبكة المميزة، تتلقى المسارات الثلاثة المؤدية إلى تلك الشبكة ثلاث إجابات مختلفة عن قصد. الاتصال الذي يحدد -network-premium يُرفض بخطأ 403 يوضح ذلك، لأن المتصل الذي تتم خدمته بهدوء من مكان آخر سيستمر في إرسال الطلبات، ثم يبحث في الفاتورة عن بند للشبكة المميزة لا يظهر أبداً. خيار الاسترجاع لا يُفعّل ببساطة، والإعداد المميز الافتراضي المحفوظ على مستخدم proxy ينتقل إلى الشبكة المشتركة، وبالتالي يظل النفق يفتح. كلاهما لم يختر الإنفاق على ذلك الاتصال.
هناك ثلاث مجموعات تُرفض تماماً بدلاً من تلبيتها جزئياً: الاستهداف الدقيق على الشبكة المشتركة، و -fallback-premium مع -network-premium، والاستهداف الدقيق أثناء تفعيل الاسترجاع. يدعم المنفذ طلبات CONNECT فقط، لذا فإن العميل الذي يمرر طلب http:// عادي بدلاً من إنشائه عبر نفق يحصل على خطأ 405 (ينشئ curl النفق باستخدام --proxytunnel). ويجب أن يحمل المتصفح الذي يعمل عبر المنفذ اسم جلسة دائماً، نظراً لأن تحميل صفحة واحدة يفتح عشرات الاتصالات.
عدة عمال، كل منهم بعنوان خاص؟ امنح كل عامل اسم جلسة خاصاً به:
import requests
TEMPLATE = "http://USERNAME-country-de-session-{name}:PASSWORD@proxy.foura.ai:34004"
def worker_session(name):
proxy = TEMPLATE.format(name=name)
s = requests.Session()
s.proxies = {"http": proxy, "https": proxy}
return s
workers = [worker_session(f"w{i}") for i in range(4)]
print(workers[0].get("https://example.com").status_code)
تقوم لوحة التحكم بنفس الشيء على نطاق واسع: حدد Sticky، واختر العدد، وستعرض علامة تبويب Connection string سطرا واحدا لكل عنوان، إما كـ URL أو كـ host:port:user:pass لمديري الـ proxy. هل تواجه مشكلة بسبب رفض الطلب؟ أضف -sv إلى استدعاء curl وقم بتمرير النتيجة عبر 2>&1 | grep -i x-foura-error. جميع الخيارات متوفرة في مرجع منفذ الـ proxy، وجانب لوحة التحكم في مستخدمي الـ Proxy.
الخطوات التالية
أول عميل بنيناه على proxy users هو عميلنا الخاص. ترسل إضافة FourA Chrome extension متصفحك عبر أحدها: اختر الشبكة والدولة، وفعّل المفتاح، وسيعرض سطر الحالة العنوان الذي تراه المواقع. إنها نسخة تجريبية، ليست متوفرة في Chrome Web Store، وتُثبت من قسم Tools في لوحة التحكم عبر وضع المطورين. في المستقبل، ستتوفر ميزة فوترة المؤسسات ضمن خارطة الطريق العامة، وهو أمر مهم هنا لأن proxy user التابع لمؤسسة ما يُفوتر على مالك تلك المؤسسة اليوم.
يعد عنوان proxy URL أقدم عقد تكامل موجود، وتدعمه بالفعل جميع الأدوات التي تستخدمها. الجزء الذي يستحق الاهتمام لم يكن النفق البرمجي إطلاقا، بل ما يُسمح للنص البرمجي قبله بأن يعنيه، وما يحدث عندما تخطئ في إعداده.