آن انتقال PHP multi-cURL از کدام پروکسی استفاده کرد؟
فراداده پروکسی را همراه هر handle cURL نگه دارید و مسیر پیکربندیشده را از IP خروجی مشاهدهشده توسط مقصد جدا کنید.
انتقالهای multi-cURL به ترتیب خودشان تمام میشوند. اگر به هر handle پروکسی متفاوتی اختصاص داده باشید، نخستین نتیجه کاملشده لزوماً به نخستین پروکسی در فهرست ورودی شما تعلق ندارد.
هنگام پیکربندی هر handle یک شناسه انتقال پایدار پیوست کنید. اگر نقاط پایانی عمومی قابل انتخاب را آزمایش میکنید، فهرست پروکسی 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() انتقالی کاملشده را گزارش میکند، از handle بازگشتی برای بازیابی شناسه استفاده کنید:
$id = curl_getinfo($message['handle'], CURLINFO_PRIVATE);
یک رکورد برنامه با کلید همان شناسه نگه دارید که مقصد، پروکسی پیکربندیشده و شماره تلاش را دربر دارد. تلاش دوباره از طریق پروکسی دیگر شایسته یک رکورد تلاش جدید است، حتی اگر به همان کار کلی تعلق داشته باشد.
سه نوع نشانی را جدا نگه دارید
نقطه پایانی پروکسی پیکربندیشده نشانیای است که به cURL داده میشود. نشانی همتای یک اتصال، اتصال شبکهای را توصیف میکند که cURL باز کرده است. IP خروجی مشاهدهشده توسط مقصد اطلاعاتی است که از طرف مقابل گزارش میشود. اینها میتوانند متفاوت باشند، بهویژه با پروکسیهای زنجیرهای یا مدیریتشده توسط ارائهدهنده.
فراداده خصوصی پیکربندی موردنظر شما را ثبت میکند؛ نمیتواند اثبات کند مقصد کدام IP را دیده است. برعکس، پاسخ IP مقصد بهطور خودکار نمیگوید کدام handle در برنامه شما آن را تولید کرده است.
در گزارشهای روزمره یک شناسه پروکسی ایمن ذخیره کنید. اگر نقطه پایانی کامل حاوی اعتبارنامه باشد، ثبت آن URL برای هر انتقال ناموفق رمز عبور را در سراسر مجموعه خطاهای شما پخش میکند.
این گام کوچک حسابداری خواندن نتایج مختلط را آسانتر میکند: یک کار، یک تلاش، یک پروکسی انتخابشده و یک نتیجه واقعی. همچنین از تکیه بر نمایشهای تصادفی handle که میان APIهای cURL مبتنی بر منابع و مبتنی بر اشیای PHP تغییر کردهاند پرهیز میکند.