تكتمل عمليات النقل متعدد cURL بترتيبها الخاص. إذا خصصت وكيلاً مختلفاً لكل مقبض، فإن أول نتيجة مكتملة لا تنتمي بالضرورة إلى أول وكيل في قائمة الإدخال.

أرفق معرّف نقل ثابتاً أثناء تهيئة كل مقبض. إذا كنت تختبر نقاط نهاية عامة قابلة للاختيار، فإن قائمة وكلاء HTTP توفر مرشحات HTTP. يكشف PHP آلية البيانات الخاصة في libcurl:

$id = 'job-17';
curl_setopt($handle, CURLOPT_PROXY, 'http://203.0.113.10:8080');
curl_setopt($handle, CURLOPT_PRIVATE, $id);

عندما يبلّغ curl_multi_info_read() عن نقل مكتمل، استخدم المقبض المُعاد لاسترداد المعرّف:

$id = curl_getinfo($message['handle'], CURLINFO_PRIVATE);

احتفظ بسجل تطبيقي مفتاحه ذلك المعرّف يحتوي على الوجهة والوكيل المهيّأ ورقم المحاولة. إعادة المحاولة عبر وكيل آخر تستحق سجل محاولة جديداً، حتى لو كانت تنتمي إلى المهمة الكلية نفسها.

افصل بين ثلاثة أنواع من العناوين

نقطة نهاية الوكيل المهيّأة هي العنوان المقدّم إلى cURL. عنوان النظير للاتصال يصف اتصال الشبكة الذي فتحه cURL. عنوان IP الخارجي الذي تراه الوجهة معلومة تُبلّغ من الطرف الآخر. يمكن أن تختلف، خصوصاً مع الوكلاء المتسلسلة أو المُدارة من المزوّد.

تسجّل البيانات الوصفية الخاصة تهيئتك المقصودة؛ ولا يمكنها إثبات أي IP رأته الوجهة. وبالعكس، فإن استجابة IP من الوجهة لا تخبرك تلقائياً أي مقبض في برنامجك أنتجه.

خزّن معرّف وكيل آمن في السجلات الروتينية. إذا كانت نقطة النهاية الكاملة تحتوي على بيانات اعتماد، فإن تسجيل ذلك العنوان لكل نقل فاشل ينشر كلمة المرور في جميع أنحاء مجموعة الأخطاء.

هذه الخطوة الصغيرة في مسك الدفاتر تجعل النتائج المختلطة أسهل في القراءة: مهمة واحدة، ومحاولة واحدة، ووكيل واحد مختار، ونتيجة فعلية واحدة. كما تتجنب الاعتماد على تمثيلات المقابض العرضية التي تغيّرت بين واجهات cURL القائمة على الموارد والقائمة على الكائنات في PHP.

مقالات ذات صلة