Трансферите с multi-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 отговорът на дестинацията не ви казва автоматично кой манипулатор във вашата програма го е създал.

Съхранявайте безопасен идентификатор на прокси в рутинните журнали. Ако пълната крайна точка съдържа идентификационни данни, записването на този URL за всеки неуспешен трансфер разпространява паролата из цялата ви колекция от грешки.

Тази малка счетоводна стъпка прави смесените резултати по-лесни за четене: една задача, един опит, едно избрано прокси и един действителен резултат. Тя също избягва разчитането на случайни представяния на манипулатора, които са се променили между cURL API на PHP, базирани на ресурси и на обекти.

Подобни статии