Який проксі використав те передавання 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, які змінилися між cURL API PHP на основі ресурсів і на основі об'єктів.